STAスレッド同期を実行するのが最良でしたか?MsgWaitForMultipleObjectsExは、MFCアプリケーションのメインSTAスレッドをデッドロックします。
私はメインと2番目のSTAスレッドを持つダイアログベースのMFCアプリケーションを持っています。メインのUIスレッドでCOMオブジェクトを作成しました。
私は2番目のスレッドからCOMインターフェイスを呼び出します。メインスレッドでは、メインスレッドが進む前に2つ目のスレッドが終了していることを確認するために、ループを使用してスレッドを待ちます。このループはMsgWaitForMultipleObjectsEx(timout = 500)ループを呼び出します。
私はすぐに待たされました。その後、私は、MFCメッセージポンプ、AfxInternalPumpMessage()、呼び出しをブロックするのに役立ちますが、デッドロック状況ではまったく助けていないことに気付きました。
次に、Peek/Translate/DispatchMessageコードを待機ループに追加して、すべて作業しました。
Peek/Translate/DispatchMessageループを手作業でコーディングしなければ、STAスレッドの同期はまったくできないようです。待っている通話があなたにデッドロックします。次に、STAスレッドを同期するための最良の方法または標準的な方法は何ですか?
ありがとうございます!
なぜMsgWaitForMultipleObjectsExを呼び出す必要がありますか? 2番目のスレッドでは、完了したら最初のスレッドにメッセージを投稿してみませんか? – wj32