了解WinAPI Sleep() 函數持續時間的差異
當以1 毫秒為參數呼叫WinAPI Sleep() 函數時,據觀察,執行緒實際上暫停的時間要長得多,通常約為15 毫秒。這種現象引起了人們對潛在系統問題的擔憂。
Windows 中的時間量化
Windows 採用時間量化機制進行執行緒調度。這意味著系統以離散間隔(稱為量子)調度線程。這些間隔的確切持續時間因多種因素而異,包括 Windows 版本和版本。平均而言,Windows 7 的運行時間量約為 15.6 毫秒。
對Sleep() 持續時間的影響
作為時間量化的結果,任何非零值提供給Sleep() 的延遲參數向上舍入到最接近的量。這解釋了為什麼 Sleep(1) 呼叫實際上會將執行緒暫停 15 毫秒,這是最接近 1 毫秒的時間量。
驗證
驗證此行為,您可以執行提供的程式碼片段。根據系統的計時器解析度設置,運行程式碼可能會產生不同的結果。如果系統範圍的計時器解析度已手動設定為 1 毫秒,您可能會觀察到較短的睡眠時間。然而,預設情況下,Windows 7 使用 15.6 毫秒的計時器分辨率,導致觀察到的睡眠時間延長。
結論
Sleep() 函數的差異持續時間歸因於 Windows 執行緒調度程序中固有的時間量化機制。這種向上舍入可確保執行緒調度高效且可預測地執行,從而防止潛在的執行緒調度衝突。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3