반응형
double g_timePerFrame;// 임의로 정해놓은 프레임 제한시간
int APIENTRY WinMain(
HINSTANCE a_hInst,
HINSTANCE a_hPrevInst,
LPSTR a_lpszCmdParam,
int a_iCmdShow)
{
//윈도우 클래스 등록
if (!InitWndClass(a_hInst))
{
return false;
}
//윈도우 생성 및 화면에 보여주기
if (!InitInstance(a_hInst, a_iCmdShow))
{
return false;
}
MSG Message;
std::chrono::system_clock::time_point worktime_old = std::chrono::system_clock::now();
std::chrono::system_clock::time_point worktime_now;
g_timePerFrame = 200.0;
while (1)
{
if (PeekMessage(&Message, 0, 0, 0, PM_REMOVE))
{
if (Message.message == WM_QUIT || Message.message == WM_DESTROY)
{
break;
}
TranslateMessage(&Message);
DispatchMessage(&Message);
}
else
{
worktime_now = std::chrono::system_clock::now();
//루프가 끝나고, 다시 시작하는 시점 까지의 경과시간(공백시간)
std::chrono::duration<double, std::milli> work_time = worktime_now - worktime_old;
if (work_time.count() < g_timePerFrame)
{
double d = g_timePerFrame - work_time.count(); //임의로 정해놓은 프레임 제한시간에서 실제 프레임당 걸리는 시간을 빼준다, 그렇게 남는시간은
std::chrono::duration<double, std::milli> sleepTime(d);
std::chrono::milliseconds sleepTime_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(sleepTime);
std::this_thread::sleep_for(sleepTime_ms_duration); // 해당 thread를 sleep 시키는 시간으로 쓴다
}
worktime_old = std::chrono::system_clock::now();
//ToDo : GameLogic 처리 Update, Rendering
}
}
return Message.wParam;
}
반응형
'develop-note' 카테고리의 다른 글
Window Title 한글자만 나오는 버그 (0) | 2021.01.28 |
---|---|
ImGUI 사용도중 마우스 위치가 안맞는 버그 (0) | 2021.01.06 |
Direct2D Sprite Animation, 공에 중력 적용 (0) | 2020.07.01 |
WinAPI - WM_MOUSEMOVE, 마우스 position 가져오기 test (0) | 2020.05.06 |
Astar_GridMapTool (0) | 2020.04.24 |