Ich programmiere mit winapi. Wie warte ich auf eine Nachricht für eine bestimmte Zeit? Wenn keine Nachricht vorhanden ist, kann ich eine andere Aufgabe ausführen. Ich kann Sleep nicht verwenden, da das Fenster Callback-Verfahren verzögert wird.Warte auf eine Fenstermeldung für eine definierte Zeit
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
}
}
Diese Funktion wartet nicht auf Fensterereignisse. – Squall
Ja, tut es. Siehe das dwWaitMask-Argument für die Arten von Ereignissen, auf denen es aufwachen kann. –
Diese Funktion schlägt fehl und GetLastError() gibt ERROR_INVALID_HANDLE zurück. Ich versuchte MsgWaitForMultipleObjects (1, (HANDLE *) & hwnd, wahr, 30, QS_ALLEVENTS); MsgWaitForMultipleObjects (1, & current_thread, true, 30, QS_ALLEVENTS); – Squall