- 締切済み
【MFC】イベントの無効化について
[環境] Visual Studio 2005 MFC ファイル書き込み中、ダイアログ上を左クリック連打すると タイトルバー上に[Not Responding]と表示され、フリーズしてしまいます。 そこで、ファイル書き込み中処理の間、イベントの無効化をしようと考えているのですが、どのようにすればいいでしょうか? また、別に何か良い方法がありましたらご教示いただけないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 ReplyMessage()APIで先にメッセージへ応答してから処理を続けてみては。 呼び出す位置は、ボタンハンドラの一番上の行辺りです。 http://msdn.microsoft.com/ja-jp/library/cc411016.aspx http://www.eternalwindows.jp/windevelop/message/message05.html 此れで上手くいかなければ、スレッドを回しましょう。
- zwi
- ベストアンサー率56% (730/1282)
reset_catさんの言いたいことが伝わっていないみたいですね。 Windowsのイベント処理は、Windowsのアプリの仕組みとして長時間処理することは許されていません。Windowsのアプリは一定周期でメッセージ処理を行うことを義務付けられているので、そのためにはイベント処理を終わる必要があるのです。もし、10秒以上処理を続けると応答なし[Not Responding]と判断されます。 目安として、0.5秒ぐらいで処理を終えないとウィンドウの反応が悪いと使う人に思われてしまいます。出来れば0.1秒未満が望ましいですが。 まぁ、この問題に対応することは、結構面倒なんですけどね。 こっちが一定時間毎にメッセージ処理を強引に処理する例。 http://www.crimson-systems.com/tips/t002b.htm こっちが長い処理をスレッドで行う場合の例です。 http://www.ne.jp/asahi/hishidama/home/tech/vcpp/thread.html
- reset_cat
- ベストアンサー率68% (94/138)
問題となっているソースがないので推測になりますが、ファイル書き込み処理を直接左クリックハンドラに書いていませんか? 特に対策していないファイル書き込み処理で、書き込みに時間がかかるとメッセージループが動作できなくなるため、質問の内容の現象が出ます。 対策には、オーバーラップを使うかスレッドを使うか・・・
補足
説明が足りず申し訳ありません。 ファイル書き込み処理は、ボタンコントロールの押下イベントで始まります。 また、時間がかかるファイル書き込みを想定しているので、プログレスバーを用いております。