私は数年前にC++(MFC、Visual Studio 6.0)でビルドされたプログラムを持っていて、特定のWindowsマシンでかなりの時間(5年以上)実行されていました。 1ヶ月前にPCが交換され(古いものが死亡した)、その後プログラムのタイミング動作が変更されました。理由を理解する助けが必要です。PCを交換した後のSleep()の精度が低下しますか? (C++)
このプログラムの主な機能は、オンとオフの間の非常に正確な遅延で、オンとオフ信号を外部カードに送信することによってキーストロークに応答することです。例えば、プログラムの流れ:
> wait for keystroke...
> ! keystroke occurred
> send ON message
> wait 150ms
> send OFF message
異なるキーストロークは20msのと150msの間に、それらに関連する異なる待機期間を、持っている(非常に決定論的な時間は、特定のキーストロークに応じて)。タイミングは非常に重要です。待機は単純なSleep()
を使用して実行されます。古いPCの睡眠の正確さは1-2msのずれであった。私は(外部カード上の)コンピュータの外部のタイミングを測定することができるので、スリープ時間の測定は非常に正確です。このようなON-sleep-OFFサイクルを1年に何千回も実行するこのマシンを考慮に入れると、私が持っている精度データは健全です。
PCを交換したため、タイミングのずれは10ms以上です。
私は以前のPCをインストールしていないので、いくつかの追加ソフトウェアパッケージがインストールされている可能性があります。また、以前のPCがWindows 2000かWindows XPかを覚えていないことを認めても恥ずかしいです。私はそれがXPであったと確信していますが、100%ではありません(そして私は今チェックできません...)。新しいものはWindows XPです。
タイマーに基づいてスリープメカニズムを変更しようとしましたが、精度が向上しませんでした。
この変更について何か説明できますか?以前のPCにインストールされている可能性があるソフトウェアパッケージがありますか?問題に対処するベストプラクティスはありますか?
Lucas Haleのソフトウェアをダウンロードし、それは明日のセットアップで。私は更新します、ありがとう。 –
関数の名前をsleepish()に変更する必要があります。実際にどれくらいの時間スリープ状態になるのかはいつも分かっています...あなたの以前の設定があなたに正確な結果を与えたことに驚いています! – Kieveli
これについてのドキュメントは明確です。なぜあなたが驚いているのか分かりません。 –