Я столкнулся с таким, как мне кажется, странным поведением WinAPI. В моей программе я устанавливаю таймер для окна с помощью
::SetTimer(window_handle, timer_id, 10, NULL);
и обрабатываю сообщение WM_TIMER в своей оконной процедуре. Чтобы уменьшить количество необходимого процессорного времени, я также использую функцию ::WaitMessage
в моем насосе сообщений. Оказывается, пока у меня есть функция ::WaitMessage
, сообщения WM_TIMER просто перестают приходить через некоторое время. Если я удалю его из своего сообщения, все будет работать нормально, как и ожидалось.
Теперь мне интересно, то ли я неправильно настроил таймер, то ли это стандартное поведение ::WaitMessage
. Поиск в MSDN и в Интернете не дал мне понять, почему это так.
Вот программа для отправки сообщений, которую я использую.:
while(true) {
if(GetMessage(&msg, _window_handle, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
return 0;
}
WaitMessage();
}
Надеюсь, что кто-нибудь сможет мне это прояснить.