这个框架的原理就是首先创建一个Event作为渲染信号,并且用timeSetEvent函数按照帧速频率控制它变为“有信号”
// Create render signal event HANDLE g_hTickEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); ResetEvent(g_hTickEvent); // Create time event MMRESULT g_hEventTimer = ::timeSetEvent( (INT)(1000.0f/MAX_FPS), 1, (LPTIMECALLBACK)g_hTickEvent, 0, TIME_PERIODIC|TIME_CALLBACK_EVENT_SET);
MSG msg; ZeroMemory( &msg, sizeof(msg) ); while(msg.message!=WM_QUIT) { if(WAIT_OBJECT_0 == MsgWaitForMultipleObjects(1, &g_hTickEvent, FALSE, 1000, QS_ALLINPUT)) { Render(); } else { while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); }; } }