我花了一些时间试图研究一个明确的答案,并找不到可靠的来源。在先前调度的消息回调完成之前触发消息时会发生什么?
我的场景相当简单。我有一个消息泵设置的线程正在处理来自定时器的循环事件。这里是消息泵源:
// 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毫秒,计时器将再次触发它的事件。由于回调函数是在与消息泵相同的线程上执行的,我假定在消息泵处理下一个计时器消息之前回调必须完成。
这是正确的吗?