delphiでタイマー割り込みで動作するアプリを作成しています。
(TTimerで0.1秒毎に処理をする)
しばらく実行していると割り込み間隔が遅くなってきます。
フォームを表示すると解消します。
別アプリも動作していて、こちらは常時画面を更新しています。
OSが優先順位を変更する(表示しないから遅くする)とか考えられますでしょうか?
Windows標準タイマーはあんまり正確ではありませんから、しばらくするとずれるというのは仕様です。
簡単な方法ですが、予定時間よりちょっと短い間隔でタイマーを実行するなどして対処してみてください(たとえばうちでは、秒まで表示する時計アプリの画面を更新するのに、0.1秒のタイマーを使っています)。
タイマーの間隔は常に数十msオーダーで一定のはずです。
一回の処理が100ms以上かかってるのではないでしょうか?
どうも、回答ありがとうございます。
少し重い処理していますので、2重に割り込むのはチェックしていて、その場合はフォームを表示して、メインの処理はキャンセルしています。
勘違いしていたようで、割り込みタイミングが変化しているのではなく、システムが重くなっているのか、別アプリ(リアルタイム系のゲーム)の動作が遅くなっているようです。
別アプリの処理時間を食ってしまってるのでしょうか?
fsStayOnTopのフォームを表示したとたんに解消されるのが理解できなく、困っております。
タイマーは、WM_TIMERメッセージを監視しているだけですので、メッセージ処理が飛ばされたり、遅延したりすることはよくあることです。
正確に計る必要があるならば、Threadを用意して監視した方がよろしいかと思います。
ツイート | ![]() |