だから私は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
}
この例では、すべてのメッセージが処理されますか、それともこのループ構造により、フレームごとに1つのメッセージのみが処理されますか?
一度に1つのメッセージのみを処理する場合、すべてのメッセージが確実に処理されるように、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
}