Windows 在定义的时间内等待窗口消息
我正在用winapi编程。如何在定义的时间内等待消息? 如果没有消息,我可以执行另一项任务。我不能使用睡眠,因为窗口回调过程将被延迟Windows 在定义的时间内等待窗口消息,windows,winapi,loops,timer,window,Windows,Winapi,Loops,Timer,Window,我正在用winapi编程。如何在定义的时间内等待消息? 如果没有消息,我可以执行另一项任务。我不能使用睡眠,因为窗口回调过程将被延迟 while (true){ ...//wait a message for 30 miliseconds GetMessage(&message, hwnd, 0, 0) ) or PeekMessage(&message, hwnd, 0, 0, PM_REMOVE) ... if ( no_message ){
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定时器。这正是它的用途。这似乎是一个奇怪的请求。Windows程序应该是响应的。如果call_a_函数需要很长时间,那么您的应用程序将得到“此Windows无响应”处理 此外,如果队列中没有已发布的消息,则GetMessage将进入等待状态。我不明白为什么您的消息循环看起来与以前的消息循环如此不同
我认为要很好地回答这个问题,了解调用函数例程的用途会很有帮助。此函数不等待窗口事件。是的,它会等待。有关可以唤醒的事件类型,请参见dwWaitMask参数。此函数失败,GetLastError()返回错误\u无效\u句柄。我尝试了MsgWaitForMultipleObjects(1,(HANDLE*)&hwnd,true,30,QS_ALLEVENTS);MsgWaitForMultipleObjects(1,&当前线程,true,30,QS_事件);您尝试的两件事不是有效的句柄值。(HWND不是句柄,也不是指向变量的指针。)如果不想等待句柄(如事件或其他),请为前三个参数传递零、NULL、FALSE:例如MsgWaitForMultipleObjects(0、NULL、FALSE、30、QS_ALLEVENTS)