等待定义时间的窗口消息

时间:2010-11-22 16:25:37

标签: windows winapi loops timer window

我正在用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 个答案:

答案 0 :(得分:6)

这正是MsgWaitForMultipleObjects的用途。

答案 1 :(得分:1)

您可以使用timer

This site还展示了如何使用win32计时器。

答案 2 :(得分:0)

这似乎是一个奇怪的要求。 Windows程序应该是响应式的。如果call_a_function需要花费大量时间,那么您的应用将获得“此Windows无响应”处理。

此外,如果队列中没有发布的消息,GetMessage将进入等待状态。我不明白为什么你的消息循环与canonical message loop看起来如此不同。

我想回答这个问题,了解call_a_function例程的目的会有所帮助。