0

私は、継続的にまたは数秒ごとに実行される別のループが必要な MFC プロジェクトに取り組んでおり、ユーザーからの入力を取得するためにダイアログを実行する必要がある場合とそうでない場合があります。私は AfxBeginThread を使用することを考えていましたが、私がそれについて読んだことから、連続ループでは実際には機能しません。

4

1 に答える 1

1

やらないでください。ワーカー スレッドでダイアログを切り取ることはできません。これらは、機能するためにメッセージ ポンプが必要なため、メイン スレッドでのみ開始できます。

数秒ごとに発生する何らかのシグナルだけが必要な場合は、timerが必要です。必要なタイマー期間のタイマーを設定し、メイン スレッドが目的の WM_TIMER メッセージを処理したときに、ダイアログをポップアップして目的の操作を行うことができます。

ワーカー スレッドになんらかの作業をさせたい場合 (ユーザーに情報を求めることを含む場合と含まない場合があります)、スレッドでPostMessage()を使用してメッセージをメイン スレッドに送信し、それを処理するようにします。ユーザーにデータを要求し、入力データを使用してシグナルをワーカー スレッドに送り返すことで、メイン スレッドにメッセージを送信します。最後のビットを達成する 1 つの方法は、ワーカー スレッドのハンドルと、新しく入力されたデータを処理する関数へのポインターを使用して、メイン スレッドからQueueUserAPC()を呼び出すことです。

于 2010-09-13T19:33:20.003 に答える