如何确定当前的Windows计时器分辨率?

时间:2014-01-21 15:48:27

标签: c# windows winapi timing

这可能是显而易见的,但我找不到/ google正确的方法来获取计时器分辨率的当前系统值,程序可以通过timeBeginPeriod(n)/ timeEndPeriod(n)来设置。我想知道当前的分辨率是什么...... Windows 7默认值似乎是15.6毫秒,但其他应用程序或机器供应商可能已经更改了设置。

有一些工具会报告该值,但我需要读取应用程序中的值。

感谢您提供快速提示或链接。 C#会是一个加号,但我知道我的方式P/Invoke

修改 感谢答案,我在C#中使用了所描述的方法制作了一个小工具: github.com/tebjan/TimerTool

Enter image description here

1 个答案:

答案 0 :(得分:2)

Windows计时器解析由隐藏的API调用提供:

NTSTATUS NtQueryTimerResolution(OUT PULONGMinimumResolution, 
                                OUT LONGMaximumResolution, 
                                OUT PULONGActualResolution);

NtQueryTimerResolution由本机Windows NT库NTDLL.DLL导出。

ActualResolution 的常见硬件平台报告156,250或100,144;较旧的平台可能会报告更多的数字;更新的系统,特别是当支持HPET(高精度事件计时器)或恒定/不变TSC时,可以为ActualResolution返回156,001。

timeBeginPeriod(n)的来电会反映在 ActualResolution 中。

this回答中的更多细节。