Windows Server 2008 で信頼できる処理時間を得るために、いくつかのことを調整できます。そのいくつかを次に示します。
CPU への高負荷を回避します。
コードのメモリ フットプリントが小さくなるように調整します。
プロセスの優先度クラスとスレッドの優先度を高く設定します。と同じくらい高い可能性がREALTIME_PRIORITY_CLASS
ありTHREAD_PRIORITY_TIME_CRITICAL
ます。
スレッド アフィニティ マスクを設定して、タイム クリティカルな部分が で実行されないようにしCore 0
ます。コア 0 は、一部のシステム サービス専用です。別のコードを使用すると、依存関係が回避されます。
Sleep(0)
適切な場合の使用。Sleep(0) は非同期サービスであり、スケジューラを強制的に反応させます。このようにして、プロセス/スレッドを選択してCPUをすぐに取得するスケジューラをトリガーできます。これは、最優先事項であるためです。
コードが他のサービスにも時間を与えていることを確認してください。最優先では、他のすべてのスレッドが基本的に停止します。(マウスイベントなどは処理されません)
マルチメディア タイマー API を使用して、システムの割り込み頻度を増やすことができます。timeGetDevCaps関数を使用して、システムの最大許容割り込み頻度を照会し、構造体で返されたtimeBeginPeriodを使用します。これにより、システムは最大の割り込み頻度で実行されます。完了したら、 timeEndPeriodを呼び出してマルチメディア タイマー リソースを解放することを忘れないでください。wPeriodMin
timeBeginPeriod
TIMECAPS
これらのルールに注意深く従うと、10 マイクロ秒単位の正確なタイミングが非常に高い信頼性で得られます。ただし、上記のすべてを合計すると、いくらか複雑になります。そのため、保証は一切できません。しかし、RTOS システムでさえ、そのような保証はありません。コーディングが適切に行われていない場合、OS がどのように呼び出されても、想定どおりに動作しません。同等の .Net サービスへのその他のメモとリンクは、ここにあります。
これにより、数 10 マイクロ秒までの時間同期 ( Precision Time Protocol ) の実装が可能になります。
Precision Time Protocol の開発者向け FAQ は、こちらでご覧いただけます。
Linux も要求された後に編集します。たとえば、これなど、いくつかのパッケージが利用可能です。ここで報告されている典型的な精度も 10 ~ 100 マイクロ秒の範囲です。
当然のことながら、同等の標準ハードウェアで実行した場合、Windows と Linux の結果は非常に似ています。どちらも魔法のようなことはできません。