【问题标题】:Increase timer resolution (high resolution) on Windows without NtSetTimerResolution在没有 NtSetTimerResolution 的情况下增加 Windows 上的计时器分辨率(高分辨率)
【发布时间】:2020-03-17 01:18:14
【问题描述】:

我正在寻找某种具有比 Windows 默认约 15 毫秒更高分辨率的计时器。我不需要一个计时器来测量时间,而是一个能够等待 X 毫秒(或每 X 毫秒调用一次事件)的计时器。我知道可以使用NtSetTimerResolution 更改Windows 计时器分辨率,但这会影响所有应用程序(我不想要)。我不需要太多的精度,所以说如果我在寻找 2ms,那么 1.5ms 和 2.5ms 也可以。

使用微调器可以工作,但这显然会导致过多的 CPU 使用率。只要能够完成工作,也欢迎有创意的想法。

【问题讨论】:

  • 你试过 std::chrono 吗?
  • 影响每个应用程序的问题是什么?它不会影响计时器持续时间本身,只会影响最小分辨率。
  • 请选择一种语言,c++c# 的答案大不相同。
  • @Federico 我需要每 2 毫秒运行一次检查,正常的 Windows 计时器不允许该分辨率(~15.6 毫秒)。您可以使用 NtSetTimerResolution 更改计时器分辨率,但缺点是所有系统计时器都会更改其分辨率。

标签: c# c++ winapi timer


【解决方案1】:

NtSetTimerResolutiontimeBeginPeriod 可以增加定时器的分辨率,但它们是系统范围的。如果有人有好的想法,请告诉我。

我不建议您这样做。 Google 已修改 Chrome 以仅在必要时增加计时器频率,这在大多数情况下都有效。

Windows 上的默认计时器分辨率为 15.6 毫秒 - 计时器每秒中断 64 次。随着程序增加定时器频率,它们会增加功耗并缩短电池寿命。它们浪费的计算能力也比我预期的要多——它们会降低你的计算机速度!由于这些问题,微软多年来一直告诉开发人员不要增加定时器频率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多