在这里使用双精度的原因是试图提供足够的准确性。
详细说明:系统中断时间片由返回的ActualResolutionNtQueryTimerResolution()
给出。NtQueryTimerResolution 由本机 Windows NT 库 NTDLL.DLL 导出。系统时间增量由返回的TimeIncrementGetSystemTimeAdjustment()
给出。
这两个值决定了系统计时器的行为。它们是整数值,表示 100 ns 单位。然而,这对于今天的某些硬件来说已经不够了。在某些系统上, ActualResolution返回 9766,相当于 0.9766 毫秒。但事实上,这些系统每秒运行 1024 次中断(通过适当设置多媒体接口进行调整)。1024 次中断一秒将导致中断周期为 0.9765625 ms。这太详细了,它达到了 100 ps 的状态,因此不能以标准的ActualResolution格式保存。
因此,已决定将此类时间参数设置为 double。但是:这并不意味着支持/使用所有可能的值。无论如何, TimeIncrement给出的粒度将保持不变。
在处理计时器时,始终建议查看所涉及参数的粒度。
所以回到你的问题:Can Interval support values like 5.768585 (ms) ?
不,我上面举的系统不能。
但它可以支持5.859375(ms)!
具有不同硬件的其他系统可能支持其他数字。
所以在这里引入双重的想法并不是一个愚蠢的想法,实际上是有道理的。再花 4 个字节来让事情最终正确是一项不错的投资。
我在此处总结了有关 Windows 时间问题的更多详细信息。