2009-04-07 220 views
1

我只是在Win32中使用SetTimer方法,使用一些較低的值,例如10ms作爲超時時間。我計算了獲得500個計時器事件花費的時間,並預計它會在5秒左右。令人驚訝的是,我發現獲得這些事件大約需要7.5秒,這意味着它將在16ms左右超時。我們可以爲超時期限設置的值是否有任何限制(我在MSDN上找不到任何內容)?另外,我的系統中運行的其他進程是否會影響這些計時器消息?MFC/Win32中的計時器消息

回答

3

Windows不是一個實時操作系統,不能處理那種精度(10 ms間隔)。話雖如此,there are multiple kinds of timers和一些比其他人有更好的精確度。

5

OnTimer基於WM_TIMER消息,這是一個低優先級的消息,這意味着它只會在沒有其他消息在等待時發送。

另外MSDN解釋,不能設置的時間間隔小於USER_TIMER_MINIMUM,這是無論該調度器將兌現時間量子10.

1

您可以將系統定時器的粒度降低到1毫秒 - 這是爲MIDI工作而設計的。

基本上,我在w2k上的經驗是,在13ms以下的任何請求等待時間會返回一個等待,在兩個值0ms和13ms之間隨機振盪。比這更長的定時器通常非常準確。你的500個定時器事件 - 有些是0ms,有些是13ms(假設13ms仍然是正確的)。你最終的時間不足。

+0

是的,還有一些0 ms事件。 – Naveen 2009-04-07 17:54:31

0

如上所述 - windows不是實時操作系統。要求它做任何事情,並在以後的特定時間期待它是愚蠢的事情。設置一個計時器可以很好地在windows時間過後儘快觸發WM_TIMER事件。這可能是在處理完其他線程之後完成的。因此,無法實際預測WM_TIMER事件的實際時間 - 您所知道的是>您設置的時間...。 Checkout this article on windows time