c# - 如何确定当前Windows定时器的分辨率?

标签 c# windows winapi timing

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

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

感谢您提供任何快速提示或链接。 C# 会是一个优点,但我知道 P/Invoke 的方法.

编辑: 感谢您的回答,我用 C# 制作了一个小工具,它使用所描述的方法: github.com/tebjan/TimerTool

Enter image description here

最佳答案

Windows 计时器分辨率由隐藏的 API 调用提供:

NTSTATUS NtQueryTimerResolution(OUT PULONG MinimumResolution, 
                                OUT PULONG MaximumResolution, 
                                OUT PULONG ActualResolution);

NtQueryTimerResolution 由 native Windows NT 库 NTDLL.DLL 导出。

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

timeBeginPeriod(n)的调用反射(reflect)在ActualResolution中。

更多详细信息请参见this回答。

关于c# - 如何确定当前Windows定时器的分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262821/

相关文章:

c# - 如何将 TreeView 中的 SelectedItemValue 绑定(bind)回 Silverlight 中的 ViewModel?

c - 在 KeyPress 上关闭 MessageBox?

无法创建僵尸进程

c# - 在 Internet Explorer BHO 中添加浏览器操作按钮

c# - DateTime.ParseExact - 如何解析具有相同格式字符串的一位数和两位数的小时数?

c# - 数据行(数据表)中的链接

c# - 任何 'quick wins' 都可以使 .NET 远程处理在一台机器上更快?

windows - docker 窗口中的 Docker exec

c++ - 透明度分层窗口白色

c++ - 带有自定义数据的 SetWinEventHook