私はAfxBeginThreadを呼び出し、CWinThreadを使用してMFCアプリケーションのUIスレッドをスピンアップします。AfxBeginThread/CWinThreadメッセージポンプがアクティブになるのを待ちますか?
メインスレッドがCWinThread :: InitInstance()関数が返される前に新しいスレッドにPostThreadMessage()を実行しようとすると、PostThreadMessage()はエラーを返します:無効なスレッドハンドルです。
私の推測では、新しいスレッドのメッセージポンプは、InitInstanceが返されるまでセットアップされません。 AfxBeginThreadと私が読んだドキュメントで見たサンプルコードは、この振る舞いを説明したり、スレッドを初期化するのを待つパターンを示したりするのにはうまくいきません。
InitInstanceが返され、スレッドのメッセージポンプがメッセージを受信する準備が整うまで、メインスレッドをブロックする最善の方法は何ですか?
あなたは正しいです、私の答えは複雑すぎます。私はCWinThreadクラスをもう少し詳しく調べて答える必要がありました。キーポイントは、イベントを通知する前に新しいスレッドでPeekMessage()を呼び出すことです。 InitInstance、OnIdle、およびRunは、これを行うためのすべてのもっともらしい場所です。 –