2

MFC ベースのレガシ アプリケーションが 1 つありますが、現時点ではあまり変更できません。

INI ファイルとの間でデータの読み取り/書き込みを行う機能が 1 つあります。iniファイルでの設定が非常に少なくなることを念頭に書きました。しかし、今では非常に大きくなりました。

したがって、このタスクを実行すると、約 30 分かかります。

問題は、ユーザーがアプリケーションをクリックすると、アプリケーションがロックされ、ウィンドウ ウィンドウに応答していないというダイアログが表示され、アプリケーションが応答するのを待つ必要があるか、終了するかをユーザーに尋ねることです。

今では時間を管理できるようになりました。しかし、ウィンドウに「応答なし」の動作を表示させたくありません。

問題は、このプロセスでメインスレッドがビジーになり、UI がハングすることだと思います。これについては、あくまでも推測なのでわかりません。

これを処理するために、スレッドを作成し、その中でこの関数を呼び出します。しかし、このスレッド関数では、AfxGetMainWnd();関数が返されているため、関数を呼び出すことができませんでしたNULL

誰かが私に知らせてくれれば、そのようなケースをどのように処理するか(これが起こらないという理想的なケースを残して)、それは非常に役に立ちますか?

また、素敵なアドバイスも大歓迎です。

私のもう1つの方法は、このコードをプログレスバーダイアログに配置することです.----これについての考えは大歓迎です。

ありがとう

4

3 に答える 3

2

MFC アプリでスレッドを使用する秘訣は、メイン スレッドだけがすべての GUI 要素にアクセスできることを覚えておくことです。そのため、何らかの作業を行うためにスレッドをスピンオフする場合は、何らかの方法で更新と変更をメイン スレッドに伝え、メイン スレッドに GUI の更新を行わせる必要があります。

これを行う最も簡単な方法は、自分自身にメッセージを送信することです。メッセージ ポンプはメイン スレッド上にあるため、常にメッセージが取得されます。一度知ったら、それは本当に簡単です。

したがって、いくつかの WM_USER メッセージを作成し、必要に応じてスレッドから送信し、通常どおり処理します。

于 2013-08-11T12:28:00.967 に答える
1

ワーカー スレッドから MFC メイン スレッドへのカスタム メッセージのポストについては、こちらで説明されています (FAQ 12 を参照)。

http://vcfaq.mvps.org/mfc/index.htm

ワーカースレッドでファイルの読み取りを行う必要があります。進行状況ダイアログが必要な場合は、それをメインスレッドに入れ、メッセージを投稿して進行状況表示を更新します。

于 2013-08-11T14:40:13.803 に答える