バックグラウンドで検索操作を実行し、リストボックス内のフォアグラウンドで結果をユーザーに表示するのに問題があります。
プログラムはSendMessage
、クエリ結果をGUIに送り返すために使用します。
プログラムを閉じると、GUIはグローバル(揮発性)変数を「完了」としてマークMsgWaitForMultipleObjects
し、スレッドハンドルを待機してスレッドに参加します。
プログラムを中断すると、デッドロックが発生します。GUIはバックグラウンドスレッドの終了を待機していますが、バックグラウンドスレッドはで待機していSendMessage
ます。
MsgWaitForMultipleObjects
このデッドロックは、100ミリ秒のタイムアウトを使用してループ内で呼び出した場合でも発生しQS_ALLINPUT
ます。理由がわかりません。
このデザインは正しいですか?スレッドが終了するのを待つより良い方法はありますか?
そうでない場合、問題は何ですか?