等待一段时间的窗口消息

我正在用winapi进行编程。 我如何等待一段时间的消息? 如果没有消息,我可以做另一个任务。 我不能使用睡眠,因为窗口callback过程将被延迟。

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 } } 

你可以使用一个计时器 。

这个网站还展示了如何使用win32定时器。

这正是MsgWaitForMultipleObjects的用途。

这似乎是一个奇怪的要求。 Windows程序应该是响应式的。 如果call_a_function花费了大量的时间,那么你的应用程序将得到“这个窗口没有响应”的处理。

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

我认为要很好地回答这个问题,知道你的call_a_function例程的目的是有帮助的。