2011-02-22 38 views
0

我对winmm.dll的理解是它可以改变“滴答”的长度。无滴答操作系统中滴答的长度

在像Windows 7这样的无滴答的操作系统中,这有什么用处/作用?

+0

你在谈论timeBeginPeriod或timeSetEvent吗? “无滴答”是什么意思? – 2011-02-22 19:16:46

+0

@Hans:对于timeBeginPeriod有。 WinXP使用了一个导致“打勾”的硬件定时器。 tick是抢占线程之间的最小时间量。当发生滴答时,它会导致中断,迫使当前线程回到内核可以执行线程调度的内核。分辨率越高,发生的中断越多,从而降低系统性能,但增加了调度的良好收益。 Win7改为使用可在百万分之一秒内安排的“无滴答”中断。内核说,在这个时候唤醒我,而不是中断每个X毫秒。 – Bengie 2011-02-22 19:36:30

回答

3

调用timeBeginPeriod不允许您更改“滴答”的长度,而是设置您期望从多媒体定时器功能中获得的最小分辨率。如果您拨打timeBeginPeriod(1),那么您可以通过呼叫timeSetEvent从您设置的计时器获得1毫秒的分辨率(最好)。

除非你使用多媒体定时器(你可能不应该这样做,考虑到它们已被弃用而支持线程池定时器),没有理由打电话给timeBeginPeriod甚至不用担心它。然而,有令人信服的理由而不是调用timeBeginPeriod或设置最小定时器分辨率的任何其他功能。见http://www.microsoft.com/whdc/system/pnppwr/powermgmt/Timer-Resolution.mspxas

无论您使用timeBeginPeriod设置什么,Windows都会以100纳秒“滴答”为间隔记录时间。如果你真的需要它,timeBeginPeriod只是一种获得更细粒度的周期性事件的方法。它对Windows如何保持时间没有影响。