为什么通过timeBeginPeriod增加定时器分辨率会影响功耗?

时间:2011-09-28 22:36:02

标签: c# winapi timer

我目前正在C#中编写一个应用程序,我需要触发一个计时器。每5毫秒。从一些研究看来,最好的方法是p /调用timeBeginPeriod(...)来改变系统计时器的分辨率。它在我的示例代码中运行良好。

我在this entry的Larry Osterman的MSDN博客上发现了一个有趣的警告:

  

Adam:调用timeBeginPeriod也会提高GetTickCount的准确性。

     

使用timeBeginPeriod一般来说是一个非常糟糕的想法 - 我们一直在积极地删除它在Windows中的所有用途,因为使用它会带来功耗的后果。

     

有更好的方法可以确保您的线程及时运行。

有没有人确切知道为什么会发生这种情况,或者那些“更好的方法”(在线程中未指明)可能是什么?我们谈论了多少额外的功耗?

2 个答案:

答案 0 :(得分:16)

因为它会导致更多的CPU使用率。一个很好的解释是Timers, Timer Resolution, and Development of Efficient Code

答案 1 :(得分:5)

更改系统计时器分辨率会影响功耗,主要是因为许多开发人员不了解Windows计时器。 您会看到许多代码的睡眠或计时器值小于15毫秒。它还会改变系统任务的行为,从而导致更多的用电量。

突然将系统定时器更改为1ms所有这些仅每15ms唤醒的代码开始更频繁地唤醒,并且CPU使用率会上升。

然而,从用户的角度来看,滥用计时器的程序可能会变得更具响应性,即使是WinXP的操作系统,也需要权衡。

我有一个小程序可以更改系统计时器,因此您可以自己试验和测试电源使用情况。 http://www.lucashale.com/timer-resolution/

还有许多链接和更多背景信息