해결된 질문
작성
·
108
0
안녕하세요!
10주차의 Window API 강의를 듣던 중 TimeManager.cpp에서 QueryPerformanceFrequency와 QueryPerformanceCounter메서드에 LARGE_INTEGER 타입으로 변환해서 인자를 넘겨주는 과정에서 오류가 있었는데 해결 과정을 문의하고 싶습니다.
Types.h에 문제가 있을까 싶어서 찾아봤지만, 별다른 이상이 없어서 원인을 모르겠습니다.
답변 3
0
0
#include "pch.h"
#include "TimeManager.h"
void TimeManager::Init()
{
LARGE_INTEGER frequency;
LARGE_INTEGER prevCount;
::QueryPerformanceFrequency(&frequency);
::QueryPerformanceCounter(&prevCount); // CPU 클럭
frequency = staticcast<uint64>(frequency.QuadPart); // QuadPart 사용
prevCount = staticcast<uint64>(prevCount.QuadPart);
//::QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER>(&_frequency));
//::QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER>(&_prevCount)); // CPU 클럭
}
void TimeManager::Update()
{
LARGE_INTEGER currentCount;
::QueryPerformanceCounter(¤tCount);
deltaTime = (staticcast<float>(currentCount.QuadPart - prevCount)) / frequency;
prevCount = staticcast<uint64>(currentCount.QuadPart);
_frameCount++;
frameTime += deltaTime;
if (_frameTime >= 1.f)
{
fps = staticcast<uint32>(_frameCount / _frameTime);
_frameTime = 0.f;
_frameCount = 0;
}
}
챗지피티가 알려준대로 위의 방식으로 고쳐서 실행했더니 오류없이 잘 작동되는데
위 코드를 그대로 사용해도 될까요?
0
안녕하세요, 인프런 AI 인턴입니다. 꿈꾸는 프로그래머님에게 도움을 드리고자 합니다.
LARGE_INTEGER와 관련된 오류는 때때로 예상치 못한 타입 변환 문제로 발생할 수 있습니다. 주로 겪는 문제 중 하나는 LARGE_INTEGER 타입에 대한 잘못된 변환이거나, 헤더 파일이 올바르게 포함되지 않았기 때문일 수 있습니다.
LARGE_INTEGER 타입 확인: LARGE_INTEGER는 Windows API에서 제공하는 구조체 타입이며, 정교한 성능 타이밍을 위한 큰 정수값을 사용합니다. 만약 uint64와 같은 사용자 정의 타입을 사용하고 있다면, 직접적인 캐스팅을 피하고, 다른 방식을 사용해야 할 수 있습니다.
타입 변환 오류: 오류 메시지에 reinterpret_cast
오류가 나타난다면, LARGE_INTEGER를 uint64 또는 vice versa로 직접 캐스팅하고자 했기 때문일 가능성이 높습니다. 이는 잘못된 접근입니다. 일반적으로 QueryPerformanceFrequency나 QueryPerformanceCounter 함수 호출 시, 다음과 같은 방식을 사용할 수 있습니다:
LARGE_INTEGER frequency;
if (!QueryPerformanceFrequency(&frequency)) {
// Handle error
}
LARGE_INTEGER currentCount;
if (!QueryPerformanceCounter(¤tCount)) {
// Handle error
}
windows.h
를 포함하는지 꼭 확인해 주세요. 이 헤더는 LARGE_INTEGER와 관련된 함수를 정의합니다.아래의 기존 유사 질문 링크를 참조하시면서 확인해 보세요:
- 프레임 - 프레임 관리와 관련한 질문입니다. 여기서는 프레임 횟수와 연관된 관리에 대해 설명하고 있습니다.
추가적인 질문이 있거나 구체적인 코드 예제가 필요하시다면, 더 자세히 문의해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네 포인터 없이 LARGE_INTEGER 입니다!