所以我一直在阅读 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
}
在此示例中,是否会处理每条消息,或者此循环结构是否会导致每帧仅处理一条消息?
如果它一次只处理一条消息,我是否应该将 if(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
}