バグ(?)について

解決


ハニー  2003-03-16 11:08:01  No: 3152  IP: [192.*.*.*]

作成したプログラムを実行すると途中で「応答なし」になります。
そこで何故かShowMessage関数を入れると平気になり不思議でしょうがありません。
それはコンピューターのバグなのでしょうか?
プロジェクトが作成できるので構文上は問題ないはずなのですが・・・
「応答なし」になりやすい構文の作り方、もしくはなりにくい方法ご存知の方が
いらっしゃるならば教えていただきたいです。よろしくお願いします。

編集    削除
Kob  2003-03-16 12:42:44  No: 3153  IP: [192.*.*.*]

どのようなプログラムを書いたのでしょうか?

コードを示して頂けると、回答がつきやすくなると思います。

編集    削除
たかみちえ  URL  2003-03-16 16:14:59  No: 3154  IP: [192.*.*.*]

ShowMessageを実行すると平気になる…。
  そういうときはだいたい、"ShowMessageを表示すると処理がいったん止まる"ということが、
ポイントになっているとおもいます。

編集    削除
ハニー  2003-03-18 09:33:04  No: 3155  IP: [192.*.*.*]

Kobさん、たかみちえさんありがとうございます。
コードは手元にないので今は示せません、申し訳ないです。
後日に示したいと思います。

ShowMessageの他に簡単に処理がいったん止まるものにはどのようなものが
あるのでしょうか?Labelに表示するというのは行っているのですが、当たり前にこれは効果がありません。
プログラムに影響しない程度のイベント、関数を行いたいのですが・・・

編集    削除
にしの  2003-03-18 17:50:09  No: 3156  IP: [192.*.*.*]

Label.Caption := 進捗状況表示
のあと、
Application.ProcessMessages;
を入れると良いです。
応答なしになるのは、何らかのループ処理が原因と思われます。
該当するループ処理に、同じようにProcessMessageを呼び出す処理を加えてみてください。

編集    削除
たかみちえ  URL  2003-03-18 17:51:29  No: 3157  IP: [192.*.*.*]

Application.ProcessMessages…今メッセージキューにあるメッセージを全部処理する
  Sleep(API)…指定ミリ秒間、動作を停止させる
  Wait(おんぷ村倉庫>Delphiユニット>stdFiles内関数)…指定ミリ秒間、ProcessMessagesだけの空ループを実行(http://TakamiChie.tripod.co.jp/)

  こういうとき一番有効なのが、一番上のProcessMessagesです。
今たまっているメッセージを全部処理するので、何もないときは止まらないし、
あんまり動作に被害がありません。

  メッセージキューについてはうちの旧学校、ProcessMessagesについては、
ヘルプやBorlandのサイト参照

編集    削除
Kuborin  2003-03-19 19:09:10  No: 3158  IP: [192.*.*.*]

はじめましてm(__)m
応答なしになりにくいPGという件ですが
Loop処理であれば
Doeventsを入れてみてはいかがでしょうか?
私の経験上、応答なしというのは
プログラムが停止していることよりも
Windowsからそのプログラムにメッセージを送っても
そのプログラムの作業に急がしすぎて答えるひまがない
ということが多かったです。
そこでいったんウインドウズに制御を渡すという
DoEventsを入れるといいと思います。
但しこれを多用すると処理速度が遅くなることもありますので
注意してください

編集    削除
にしの  2003-03-19 19:46:51  No: 3159  IP: [192.*.*.*]

DoEventsはVBですよ。
Delphiのそれに相当するものは、Application.ProcessMessagesです。

編集    削除
ハニー  2003-03-21 10:42:35  No: 3160  IP: [192.*.*.*]

みなさんどうもありがとうございます。
ProcessMessageを試してみたいと思います。
たくさんのご解答ありがとうございました。

編集    削除