我花了一些时间试图为此研究一个明确的答案,但找不到可靠的来源。
我的情况相当简单。我有一个带有消息泵设置的线程,它正在处理来自计时器的重复事件。这是消息泵源:
// 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 毫秒,则计时器将再次触发其事件。由于回调与消息泵在同一线程上执行,因此我假设回调必须在消息泵处理下一条计时器消息之前完成。
那是对的吗?