所以我一直在阅读Win32消息泵,并且我很好奇DispatchMessage()函数是处理整个消息队列还是只处理队列顶部的消息?Win32消息泵,DispatchMessage()处理整个消息队列还是只处理最上面的消息?
例如,我已经看到环路如:
while(true)
{
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
do
{
} while (clock.getTimeDeltaMilliseconds() < 1.66f); // cap at 60 fps
// run frame code here
}
在这个例子中会得到处理的每个消息或执行此环结构原因仅一个消息,以每帧被处理?
如果它在一个时间只处理一个消息,我应该改变,如果(的PeekMessage)语句while循环,以确保所有消息的处理?:
while(true)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
do
{
} while (clock.getTimeDeltaMilliseconds() < 1.66f); // cap at 60 fps
// run frame code here
}
我还没有在_years_中完成Windows开发。为什么帧定时代码与消息循环在同一线程中? – Chad