高分辨率定时器与低分辨率定时器

时间:2013-06-21 13:07:41

标签: c++ windows timer

我最近一直在阅读有关高分辨率和低分辨率计时器的内容,我不太明白。它们如何运作?它们不是通过检查计算机硬件上的内部系统时钟来操作的吗?如果是这样的话意味着更高的分辨率只会更频繁地检查它,消耗更多的资源?

使用低分辨率计时器时是否有任何问题?当计时器到期时,在高分辨率计时器应该停止的一秒钟(或更早)内启动高分辨率计时器?或者这不会出于某种原因?

与低分辨率计时器相比,高分辨率计时器消耗了多少资源?

1 个答案:

答案 0 :(得分:3)

通常,低分辨率计时器会每x个时间点(例如,每1,5,10,16.6667,17.81291或20ms - 向处理器发出一个中断 - 例如,它可能有许多其他值)。当任务运行太长时,操作系统会使用它来切换任务。以及维持当前时间,"超时"等待事件和这样的事情(例如sleep类型的函数调用将自己设置为"超时"在休眠时间结束时)。

高分辨率定时器通常是一个硬件寄存器,它以高KHz或更高的频率(例如32768Hz,36KHz,12MHz,2.2GHz)连续计数[向上或向下] /更新 - 这些只是一些例子,几乎可以是任何东西)。通常情况下,这是由"读取当前值",并获得当前计数。

这将提供高分辨率的计时值,这对于测量短时间间隔非常有用(例如,用于基准测试或计算其他服务器响应ping或其他一些小时间所花费的时间),但您可以&真的"等待600毫秒"使用高分辨率计时器 - 至少在没有阅读所述计时器的情况下无数次,因为你不能(在我在这里描述的典型情况)说"告诉操作系统再次以X数字开始这个任务计数&#34 ;.

(但是,有时高分辨率计时器只是与低分辨率计时器相同的硬件,只是以不同的方式使用 - 我上面描述的差异仍然是相关的,无论是一个还是多个单位提供不同类型的计时)

请记住,如果你想要"精确计时",操作系统需要很好地发挥作用。大多数现代操作系统"不喜欢"只是坐在那里并且啜饮CPU时间的任务(例如"我们还有#34;计时器的轮询类型),因此将给出其他任何短运行时偏好的任务。这意味着如果您有高精度的时序要求,操作系统需要帮助您,而不是在正确的时间步骤停止您的任务运行。如果不确切知道自己要做什么,很难确定在你的情况下什么是正确的解决方案,那就是