Ждать сообщения окна в течение определенного времени - PullRequest
2 голосов
/ 22 ноября 2010

Я программирую с winapi. Как мне ждать сообщения в течение определенного времени? Если сообщения нет, я могу выполнить другое задание. Я не могу использовать Sleep, потому что процедура обратного вызова окна будет отложена.

while (true){
    ...//wait a message for 30 miliseconds
    GetMessage(&message, hwnd, 0, 0) ) or PeekMessage(&message, hwnd, 0, 0, PM_REMOVE)
    ...
    if ( no_message ){
        call_a_function();
    } else {
        if (finish)
            break;
        TranslateMessage(&message);
        DispatchMessage(&message);
        ...//set to wait 30 minus elapsed time 
    }
}

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010

Это именно то, для чего MsgWaitForMultipleObjects предназначен.

1 голос
/ 22 ноября 2010

Вы можете использовать таймер .

Этот сайт также показывает, как использовать таймер win32.

0 голосов
/ 23 ноября 2010

Это похоже на странный запрос. Программы для Windows должны быть отзывчивыми. Если call_a_function занимает какое-то серьезное время, ваше приложение получит процедуру «Эта Windows не отвечает».

Кроме того, GetMessage переходит в состояние ожидания, если в очереди нет опубликованных сообщений. Я не понимаю, почему ваш цикл сообщений выглядит так сильно отличается от канонического цикла сообщений .

Я думаю, что для правильного ответа на этот вопрос было бы полезно узнать цель вашей подпрограммы call_a_function.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...