Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在定义的时间内等待窗口消息_Windows_Winapi_Loops_Timer_Window - Fatal编程技术网

Windows 在定义的时间内等待窗口消息

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 ){

我正在用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 ){
        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)