WinAPI's ::WaitMessage останавливает приход WM_TIMER

Я столкнулся с таким, как мне кажется, странным поведением 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();
}

Надеюсь, что кто-нибудь сможет мне это прояснить.

0
задан Cyianor 13 April 2012 в 10:00
поделиться