我花了一些時間試圖研究一個明確的答案,並找不到可靠的來源。在先前調度的消息回調完成之前觸發消息時會發生什麼?
我的場景相當簡單。我有一個消息泵設置的線程正在處理來自定時器的循環事件。這裏是消息泵源:
// 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毫秒,計時器將再次觸發它的事件。由於回調函數是在與消息泵相同的線程上執行的,我假定在消息泵處理下一個計時器消息之前回調必須完成。
這是正確的嗎?