Windows7之前的计时器合并
Windows 7和Windows 8中提供计时器合并支持,请参见以下示例:Windows7之前的计时器合并,windows,winapi,timer,coalescing,Windows,Winapi,Timer,Coalescing,Windows 7和Windows 8中提供计时器合并支持,请参见以下示例: Windows7有一个功能,据称它支持合并和合并。 Windows8还有一个支持根据MSDN合并的功能 关于Windows 7和Windows 8中的计时器合并的讨论很多。但看起来它可能已经提前实施了。是这样吗 首先,在Vista下提供计时器合并是否正确。或者它仅仅提供了接口,并且实际上只在Windows7之后才实现合并? 从这本书上我可以读到 “这实际上是一种影响能效并有助于降低总体功耗的功能。它基于一种称为定时器合
Windows7有一个功能,据称它支持合并和合并。
Windows8还有一个支持根据MSDN合并的功能
关于Windows 7和Windows 8中的计时器合并的讨论很多。但看起来它可能已经提前实施了。是这样吗
首先,在Vista下提供计时器合并是否正确。或者它仅仅提供了接口,并且实际上只在Windows7之后才实现合并?
从这本书上我可以读到 “这实际上是一种影响能效并有助于降低总体功耗的功能。它基于一种称为定时器合并的技术。” 对于所有支持
SetThreadpoolTimer
功能的Windows版本,这句话是否正确
其次,现在我开始思考。我可以看到它的参数名为
uResolution
。在计时器事件等待期间,此参数是否会像更改全局计时器分辨率一样更改全局计时器分辨率,还是仅影响此特定计时器,同时提供计时器合并
最后,在Windows XP或Vista下是否有提供计时器合并功能的附加或替代功能?一般来说: 计时器合并提供了一种减少中断次数的方法。允许应用程序为其计时要求指定公差。这允许操作系统“批量”中断,并产生以下几种后果:
- 中断的次数可以减少。(+)
- 上下文开关的数量可能更少。(+)
- 可以降低功耗。(+)
- 大量操作可能必须在这些批处理中断(-)中完成
- 计划程序此时可能必须计划大量进程(-)
- 时间分辨率更差(-)
timeBeginPeriod
/timeEndPeriod
或底层APINtSetTimerResolution
。正如Hans提到的:“Chrome”是一个很好的例子,说明了这些功能的使用可能被严重夸大
其次,现在我开始想
timeSetEvent
是多媒体定时器功能之一。它在发动机罩下使用timeBeginPeriod
而且它使用得很糟糕:它将系统计时器分辨率设置为在执行平台上可用的计时器分辨率范围内尽可能好地匹配uResolution。在uDelay的较大值上,它可以在低分辨率下等待,直到接近延迟到期,然后才提高系统计时器分辨率,但它会将整个等待期间的计时器分辨率设置为指定的分辨率。这是痛苦的,因为知道高分辨率也适用于长时间的延迟。但是,不建议在大延迟时使用多媒体定时器功能。但是反复设置分辨率也不好(参见下面的注释)
关于timeSetEvent
的总结:这个函数根本没有做任何类似于合并的事情,它做的恰恰相反:它可以选择性地增加中断的数量;从这个意义上讲,它将事件传播到更多的中断上,并“分批”它们
SetThreadpoolTimer
首次引入了“批处理”事件的思想。这主要是由于对Windows笔记本电脑电池寿命的投诉不断增加SetWaitableTimerEx
进一步推动了该策略,而SetCoalescableTimer
是访问聚合计时器的最新API。后者引入了TIMERV_DEFAULT_合并和TIMERV_NO_合并,这是值得考虑的,因为它们允许忽略某些事实
借此机会了解有关系统计时器分辨率的一些说明: 更改系统计时器分辨率的后果不仅仅是增加中断频率。使用
timeBeginPeriod
/NtSetTimerResolution
会产生一些影响:
SetSystemTimeAdjustment
)timeBeginPeriod
/NtSetTimerResolution
频繁时累积。当试图调整系统时间以匹配NTP参考时,这可能会导致相当大的跳跃。在Windows版本timeBeginPeriod
进行扫描来获得,增加周期后再调用。吃点东西