在我看来,我遇到了 WinAPI 的奇怪行为。在我的程序中,我正在为窗口设置一个计时器
::SetTimer(window_handle, timer_id, 10, NULL);
并在我的窗口过程中处理 WM_TIMER 消息。为了减少所需的 cpu 时间,我还在::WaitMessage
消息泵中使用了该功能。现在事实证明,只要我在::WaitMessage
那里有这个功能,WM_TIMER 消息就会在一段时间后停止出现。如果我从我的消息泵中删除它,一切都会按预期工作。
现在我想知道我是否设置了错误的计时器,或者这是否是::WaitMessage
. 搜索 MSDN 和网络并没有让我知道为什么会这样。
这是我使用的消息泵:
while(true) {
if(GetMessage(&msg, _window_handle, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
return 0;
}
WaitMessage();
}
希望有人可以为我解决这个问题。