我正在創建一個繪圖應用程序,它在獲取WM_SCROLL或WM_MOUSEMOVE時呈現OpenGL。事情是,有很多鼠標移動,我只需要它每秒最多60幀。所以我在我的引擎類CanRender中創建了一個bool。所以在我的render()proc我做: if(!CanRender) { return; } CanRender = false;爲什麼我的計時器停止滴答滴答?
基本上它可以防止它呈現超過60 FPS。
我在WM_CREATE中創建了計時器。
當我得到一個WM_TIMER我設置CanRender爲true。
我發出了蜂鳴聲,所以我知道計時器正在運行。 只要我開始滾動或移動鼠標,蜂鳴聲停止,我不再看到渲染。爲什麼會阻止我的計時器?另外,當我最小化定時器再次啓動然後重新調整,它再次停止。
感謝
消息泵:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
創作:
case WM_CREATE:
//Set Window Title
SetWindowText(hWnd,engineGL.current.caption.c_str());
SetTimer(hWnd, // handle to main window
120, // timer identifier
17, // 60 fps interval
(TIMERPROC) NULL); // no timer callback
你的整個消息泵是什麼樣的,你也可以發佈你用來創建定時器的代碼嗎? – 2010-06-29 01:05:24
是的,我懷疑你的事件處理有些奇怪。 – stinky472 2010-06-29 01:06:14
只有當我的渲染函數設置CanRender爲false時,否則它的罰款 – jmasterx 2010-06-29 01:08:16