2010-11-22 7 views
2

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

答えて

6

これはまさにMsgWaitForMultipleObjectsの対象です。

+0

この関数は、ウィンドウイベントを待機しません。 – Squall

+1

はい、あります。起きる可能性があるイベントの種類については、dwWaitMask引数を参照してください。 –

+0

この関数は失敗し、GetLastError()はERROR_INVALID_HANDLEを返します。試しました MsgWaitForMultipleObjects(1、(HANDLE *)&hwnd、true、30、QS_ALLEVENTS); MsgWaitForMultipleObjects(1、&current_thread、true、30、QS_ALLEVENTS); – Squall

0

これは奇妙な要求のようです。 Windowsプログラムは応答性が高いはずです。 call_a_functionに重大な時間がかかる場合、アプリは「このWindowsは応答していません」という処理を行います。

また、キューに投稿メッセージがない場合、GetMessageは待機状態になります。メッセージループがcanonical message loopと大きく異なる理由がわかりません。

私はあなたのcall_a_functionルーチンの目的を知っていることが役に立つでしょう。

関連する問題