これに対する決定的な答えを調査するためにしばらく時間を費やしましたが、信頼できる情報源を見つけることができませんでした.
私のシナリオはかなり簡単です。タイマーからの定期的なイベントを処理するメッセージ ポンプ セットアップを含むスレッドがあります。メッセージポンプのソースは次のとおりです。
// create timer that goes off every 500 ms
UINT_PTR myTimerID = SetTimer(NULL, 0, 500, TimerCallback);
// message structure
MSG msg;
// process and handle messages for this thread
BOOL getMessageStatus;
while((getMessageStatus = GetMessage(&msg, NULL, 0, 0)) != 0)
{
// failed get message
if(getMessageStatus == -1)
{
printf("GetMessage FAILED!\n");
}
// process timer message
else if(msg.message == WM_TIMER)
{
// invoke callback
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
TimerCallback に 500 ミリ秒以上かかる場合、タイマーはそのイベントを再度発生させます。コールバックはメッセージ ポンプと同じスレッドで実行されているため、次のタイマー メッセージがメッセージ ポンプによって処理される前に、コールバックが完了する必要があると想定しています。
あれは正しいですか?