数年前にC++(MFC、Visual Studio 6.0)で構築され、特定のWindowsマシンでかなり長い間(5年以上)実行されているプログラムがあります。PCは1か月前に交換され(古いPCは故障しました)、それ以降、プログラムのタイミング動作が変更されました。理由を理解するのに助けが必要です。
プログラムの主な機能は、ON信号とOFF信号を外部カードに送信することでキーストロークに応答し、ONとOFFの間の遅延を非常に正確にすることです。プログラムフローの例:
> wait for keystroke...
> ! keystroke occurred
> send ON message
> wait 150ms
> send OFF message
キーストロークが異なれば、それに関連する待機時間も異なり、20ミリ秒から150ミリ秒の間です(特定のキーストロークに応じて非常に決定的な時間)。タイミングは非常に重要です。待機はsimpleを使用して実行されSleep()
ます。古いPCでのスリープの精度は、1〜2ミリ秒の偏差でした。コンピューターの外部(外部カード上)でタイミングを測定できるので、スリープ時間の測定は非常に正確です。このようなON-sleep-OFFサイクルを何年にもわたって1日に何千回も実行したこのマシンを考慮に入れてください。私が持っている精度データは健全です。
PCを交換したため、タイミング偏差は10ms以上です。
以前のPCをインストールしなかったため、追加のソフトウェアパッケージがインストールされている可能性があります。また、以前のPCがWindows2000であったかWindowsXPであったかを覚えていないことを認めるのは恥ずかしいことです。XPだったと確信していますが、100%ではありません(今は確認できません...)。新しいものはWindowsXPです。
スリープメカニズムをタイマーベースに変更してみましたが、精度が向上しませんでした。
この変化を説明できるものはありますか?問題を解決する可能性のある以前のPCにインストールされている可能性のあるソフトウェアパッケージはありますか?問題に対処するためのベストプラクティスはありますか?