인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

꿈꾸는 프로그래머님의 프로필 이미지

작성한 질문수

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

프레임워크 제작

Window API 강의 수강 중 LARGE_INTEGER 타입 변환 오류

해결된 질문

작성

·

108

0

안녕하세요!
10주차의 Window API 강의를 듣던 중 TimeManager.cpp에서 QueryPerformanceFrequency와 QueryPerformanceCounter메서드에 LARGE_INTEGER 타입으로 변환해서 인자를 넘겨주는 과정에서 오류가 있었는데 해결 과정을 문의하고 싶습니다.

image.pngimage.png

 

Types.h에 문제가 있을까 싶어서 찾아봤지만, 별다른 이상이 없어서 원인을 모르겠습니다.

image.png



답변 3

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

밖이라서 슬쩍 봤는데 캐스팅이 largeinteger* 가 이닌게 맞나요? 포인터 유무를 확인바랍니다

꿈꾸는 프로그래머님의 프로필 이미지

네 포인터 없이 LARGE_INTEGER 입니다!

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(&currentCount);

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 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 꿈꾸는 프로그래머님에게 도움을 드리고자 합니다.

LARGE_INTEGER와 관련된 오류는 때때로 예상치 못한 타입 변환 문제로 발생할 수 있습니다. 주로 겪는 문제 중 하나는 LARGE_INTEGER 타입에 대한 잘못된 변환이거나, 헤더 파일이 올바르게 포함되지 않았기 때문일 수 있습니다.

  1. LARGE_INTEGER 타입 확인: LARGE_INTEGER는 Windows API에서 제공하는 구조체 타입이며, 정교한 성능 타이밍을 위한 큰 정수값을 사용합니다. 만약 uint64와 같은 사용자 정의 타입을 사용하고 있다면, 직접적인 캐스팅을 피하고, 다른 방식을 사용해야 할 수 있습니다.

  2. 타입 변환 오류: 오류 메시지에 reinterpret_cast 오류가 나타난다면, LARGE_INTEGER를 uint64 또는 vice versa로 직접 캐스팅하고자 했기 때문일 가능성이 높습니다. 이는 잘못된 접근입니다. 일반적으로 QueryPerformanceFrequency나 QueryPerformanceCounter 함수 호출 시, 다음과 같은 방식을 사용할 수 있습니다:

   LARGE_INTEGER frequency;
   if (!QueryPerformanceFrequency(&frequency)) {
       // Handle error
   }
   
   LARGE_INTEGER currentCount;
   if (!QueryPerformanceCounter(&currentCount)) {
       // Handle error
   }
  1. 헤더 파일 확인: windows.h를 포함하는지 꼭 확인해 주세요. 이 헤더는 LARGE_INTEGER와 관련된 함수를 정의합니다.

아래의 기존 유사 질문 링크를 참조하시면서 확인해 보세요:
- 프레임 - 프레임 관리와 관련한 질문입니다. 여기서는 프레임 횟수와 연관된 관리에 대해 설명하고 있습니다.

추가적인 질문이 있거나 구체적인 코드 예제가 필요하시다면, 더 자세히 문의해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

꿈꾸는 프로그래머님의 프로필 이미지

기존의 Windows.h -> windows.h 로 수정했으나 오류가 고쳐지지 않았습니다.