我正在用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
}
}
答案 0 :(得分:6)
这正是MsgWaitForMultipleObjects的用途。
答案 1 :(得分:1)
答案 2 :(得分:0)
这似乎是一个奇怪的要求。 Windows程序应该是响应式的。如果call_a_function需要花费大量时间,那么您的应用将获得“此Windows无响应”处理。
此外,如果队列中没有发布的消息,GetMessage将进入等待状态。我不明白为什么你的消息循环与canonical message loop看起来如此不同。
我想回答这个问题,了解call_a_function例程的目的会有所帮助。