処理が遅くなる


taka  2005-04-05 19:26:09  No: 14114

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


たかみちえ  URL  2005-04-06 01:24:29  No: 14115

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


メラトニン  2005-04-06 03:34:58  No: 14116

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


taka  2005-04-06 19:01:54  No: 14117

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


にしの  2005-04-06 23:21:44  No: 14118

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加