処理が遅くなる


taka  2005-04-05 10:26:09  No: 14114  IP: 192.*.*.*

delphiでタイマー割り込みで動作するアプリを作成しています。
(TTimerで0.1秒毎に処理をする)
しばらく実行していると割り込み間隔が遅くなってきます。
フォームを表示すると解消します。
別アプリも動作していて、こちらは常時画面を更新しています。
OSが優先順位を変更する(表示しないから遅くする)とか考えられますでしょうか?

編集 削除
たかみちえ  URL  2005-04-05 16:24:29  No: 14115  IP: 192.*.*.*

Windows標準タイマーはあんまり正確ではありませんから、しばらくするとずれるというのは仕様です。
簡単な方法ですが、予定時間よりちょっと短い間隔でタイマーを実行するなどして対処してみてください(たとえばうちでは、秒まで表示する時計アプリの画面を更新するのに、0.1秒のタイマーを使っています)。

編集 削除
メラトニン  2005-04-05 18:34:58  No: 14116  IP: 192.*.*.*

タイマーの間隔は常に数十msオーダーで一定のはずです。
一回の処理が100ms以上かかってるのではないでしょうか?

編集 削除
taka  2005-04-06 10:01:54  No: 14117  IP: 192.*.*.*

どうも、回答ありがとうございます。
少し重い処理していますので、2重に割り込むのはチェックしていて、その場合はフォームを表示して、メインの処理はキャンセルしています。
勘違いしていたようで、割り込みタイミングが変化しているのではなく、システムが重くなっているのか、別アプリ(リアルタイム系のゲーム)の動作が遅くなっているようです。
別アプリの処理時間を食ってしまってるのでしょうか?
fsStayOnTopのフォームを表示したとたんに解消されるのが理解できなく、困っております。

編集 削除
にしの  2005-04-06 14:21:44  No: 14118  IP: 192.*.*.*

タイマーは、WM_TIMERメッセージを監視しているだけですので、メッセージ処理が飛ばされたり、遅延したりすることはよくあることです。
正確に計る必要があるならば、Threadを用意して監視した方がよろしいかと思います。

編集 削除