我並不是指精度達到1毫秒,我在詢問有關使用Sleep(60 * 60 * 1000)
延遲一小時的情況。會不會是一個小時,而不是55或70分鐘?線程是否保證喚醒並且不會永遠睡眠?WinAPI的Sleep()有多精確?
回答
超過一個小時,Sleep()調用的準確性並不差,(它也相當容易測試)。 Sleep()調用將返回足夠接近小時的時間,以至於無法用手動秒錶確定任何錯誤(在XP上試用過 - 現在沒有理由與AFAIK有什麼不同)。
錯誤wrt。如果連續調用睡眠(3600 * 1000),掛壁時間當然會累積,特別是如果在每個間隔的末端執行的操作本身冗長和/或盒子嚴重超載(即更多準備好的線程比核心)。
爲什麼線程會永遠睡眠,如果你問它睡一個小時?如果您打電話睡眠(3600 * 1000),那麼在此之後它將準備就緒。如果沒有,操作系統無論如何都會出現故障,並且您正在重新啓動。
這樣的Sleep()調用可能優先於某個定時器的原因是它是單線程的並且可以在調用者堆棧的任何地方工作 - 不需要消息處理程序和/或狀態機來處理定時器回調。
我想要的是一個不是'Sleep()'的計時器。但是這留下了一個問題 - 使用Sleep()本質上是錯誤的?當我有消息泵時,是否應該總是使用'CreateTimerQueueTimer()'(或'SetTimer()')? – mrpyo
@mrpyo - 如果你有一個消息驅動的GUI線程或類似的,那麼是的,使用一個發送WM_TIMER消息的定時器類。您不能在GUI事件處理程序中等待/休眠。在GUI風格的線程中,Sleep()本身是錯誤的,它必須及時處理輸入。 –
+1單線程。否則,等待定時器可能會使'喚醒'更具可預測性(如果正確完成,可以少於1毫秒)。但是,這仍然取決於調度程序是否允許在該時間安排任務或者其他任務是否禁止該任務。 – Arno
- 1. Java的Math.PI的價值有多精確?
- 2. Sleep()是否不準確?
- 3. 任務管理器有多精確?
- 4. 「雙精度浮點格式」有多精確?
- 5. 具有精確值的Autodesk.Viewing.Viewer3D.search()
- 6. 使用C/C++和WinApi繪製精確的1像素寬度線
- 7. 如何爲重疊窗口設置精確的客戶端大小? (winapi)
- 8. 多線程與C++的WinApi
- 9. 多播精調 - 正確的方法?
- 10. str_replace只有精確匹配
- 11. iOS GPS精度,我的iPhone 4上的GPS有多準確?
- 12. CSS的真實世界的單位有多精確?
- 13. Javascript中的sleep()
- 14. 精確的Javascript
- 15. scipys ndimage過濾器的「反射」模式到底有多精確?
- 16. 圖像元素的「完整」屬性到底有多精確?
- 17. 非3G iPhone的三角形GPS有多精確?
- 18. Play中有多個標題的精確語法! 2.0 WS請求?
- 19. 現代PC的內部時鐘有多精確?
- 20. 確定一個浮點數有多少個十進制數是精確的
- 21. Solr的只有返回精確匹配
- 22. 精確計算雙精度
- 23. Java多線程:sleep和currentThread方法
- 24. 窗口沒有WinAPI的
- 25. ElasticSearch更多重量到精確匹配
- 26. java中的Sleep()(Android)
- 27. MySQL:Datefield的精確度
- 28. gperftools CPU分析器到底有多精確?
- 29. 統計模式 - 它應該有多精確?
- 30. FreeBSD內核映像到底有多精確?
您是否考慮過線程可能不是解決當前任務的正確工具的可能性? – asawyer
@asawyer我可以在簡單的C環境中使用什麼? – mrpyo
@mrpyo:你想最終試圖完成什麼?計劃任務,定時器或類似工具可能會更好地滿足您的需求。你的問題讓我想起了[this](http://blogs.msdn.com/b/oldnewthing/archive/2006/03/23/558887.aspx)博客文章(不是說我難以置信地搖頭,但我很好奇你爲什麼要「睡覺」一個小時)。 – user786653