ここで double を使用する理由は、十分な精度を提供するためです。
詳細: システム割り込みタイム スライスは、によって返されるActualResolutionNtQueryTimerResolution()
によって与えられます。NtQueryTimerResolution は、ネイティブ Windows NT ライブラリ NTDLL.DLL によってエクスポートされます。システム時間の増分は、 によって返されるTimeIncrementGetSystemTimeAdjustment()
によって与えられます。
これら 2 つの値は、システム タイマーの動作を決定します。これらは整数値であり、100 ns 単位を表します。しかし、これは今日の特定のハードウェアではすでに不十分です。一部のシステムでは、0.9766 ミリ秒に相当する 9766 というActualResolutionが返されます。しかし実際には、これらのシステムは 1 秒あたり 1024 回の割り込みで動作しています (マルチメディア インターフェイスの適切な設定によって調整されています)。1 秒間に 1024 回の割り込みがあると、割り込み期間は 0.9765625 ms になります。これは詳細度が高すぎるため、100 ps 領域に達するため、標準のActualResolution形式では保持できません。
したがって、そのような時間パラメータを double に入れることが決定されました。ただし: これは、すべての可能な値がサポート/使用されていることを意味するわけではありません。TimeIncrementによって指定された粒度は、何があっても持続します。
タイマーを扱うときは、関連するパラメーターの粒度を確認することを常にお勧めします。
質問に戻ります。Can Interval support values like 5.768585 (ms) ?
いいえ、上記の例で取り上げたシステムではできません。
しかし、5.859375 (ms) をサポートできます!
ハードウェアが異なる他のシステムでは、他の番号がサポートされている場合があります。
したがって、ここで double を導入するという考えは、それほどばかげた考えではなく、実際には理にかなっています。物事を最終的に正しくするためにさらに 4 バイトを費やすことは、良い投資です。
ここでは、Windows の時刻に関する詳細をまとめました。