我只是在Win32中使用SetTimer方法,使用一些較低的值,例如10ms作爲超時時間。我計算了獲得500個計時器事件花費的時間,並預計它會在5秒左右。令人驚訝的是,我發現獲得這些事件大約需要7.5秒,這意味着它將在16ms左右超時。我們可以爲超時期限設置的值是否有任何限制(我在MSDN上找不到任何內容)?另外,我的系統中運行的其他進程是否會影響這些計時器消息?MFC/Win32中的計時器消息
1
A
回答
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
如上所述 - windows不是實時操作系統。要求它做任何事情,並在以後的特定時間期待它是愚蠢的事情。設置一個計時器可以很好地在windows時間過後儘快觸發WM_TIMER事件。這可能是在處理完其他線程之後完成的。因此,無法實際預測WM_TIMER事件的實際時間 - 您所知道的是>您設置的時間...。 Checkout this article on windows time
相關問題
- 1. 根據vb.net中的計時器計時器顯示消息
- 2. 德爾福OOP計時器消息
- 3. laravel中的計時消息5
- 4. 新消息計數器
- 5. Android消息計數器
- 6. 未讀消息計數器
- 7. SignalR消息計數性能計數器
- 8. VB - 可以在消息框中設置運行計時器嗎?
- 9. 如何在c計時器中顯示消息框
- 10. 如何使實時消息或字符計數器在Java中
- 11. 帶jms的消息計數器Hornetq
- 12. 計劃消息
- 13. 即時消息的HBASE模式設計
- 14. 計算JMS消息的響應時間
- 15. 取消BlackBerry中的計時器 - Java
- 16. 瀏覽器即時消息
- 17. 如何統計窗口消息隊列中的消息?
- 18. RADIUS和EAP計算消息認證器
- 19. 編譯器錯誤消息:CS1513:}預計
- 20. Java - 消息處理器設計模式
- 21. JMS消息監聽器設計
- 22. SHA512消息計劃
- 23. 取消hoverIntent計時器
- 24. 最近24小時計算消息
- 25. Laravel使用Mailgun計時消息
- 26. 消息計數器顯示Laravel中記錄的用戶的消息總數而不是計數
- 27. mysql的消息框設計
- 28. 帶RabbitMQ的計劃消息
- 29. 添加計時器intervar顯示/隱藏消息jquery
- 30. Java計算器ActionListener。除以零時如何更改消息「Infinity」?
是的,還有一些0 ms事件。 – Naveen 2009-04-07 17:54:31