dポイントプレゼントキャンペーン実施中!

[環境]
Visual Studio 2005
MFC

ファイル書き込み中、ダイアログ上を左クリック連打すると
タイトルバー上に[Not Responding]と表示され、フリーズしてしまいます。

そこで、ファイル書き込み中処理の間、イベントの無効化をしようと考えているのですが、どのようにすればいいでしょうか?
また、別に何か良い方法がありましたらご教示いただけないでしょうか?

A 回答 (3件)

 こんばんは。



 ReplyMessage()APIで先にメッセージへ応答してから処理を続けてみては。
 呼び出す位置は、ボタンハンドラの一番上の行辺りです。

 http://msdn.microsoft.com/ja-jp/library/cc411016 …
 http://www.eternalwindows.jp/windevelop/message/ …

 此れで上手くいかなければ、スレッドを回しましょう。
    • good
    • 0

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/ …
    • good
    • 0

問題となっているソースがないので推測になりますが、ファイル書き込み処理を直接左クリックハンドラに書いていませんか?


特に対策していないファイル書き込み処理で、書き込みに時間がかかるとメッセージループが動作できなくなるため、質問の内容の現象が出ます。
対策には、オーバーラップを使うかスレッドを使うか・・・

この回答への補足

説明が足りず申し訳ありません。

ファイル書き込み処理は、ボタンコントロールの押下イベントで始まります。
また、時間がかかるファイル書き込みを想定しているので、プログレスバーを用いております。

補足日時:2010/02/15 13:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています