摘要: 當 timeout = 0, 即 Sleep(0),如果線程調度器的可運行隊列中有大于或等于當前線程優先級的就緒線程存在,操作系統會將當前線程從處理器上移除,調度其他優先級高的就緒線程運行;如果可運行隊列中的沒有就緒線程或所有就緒線程的優先級均低于當前線程優先級,那么當前線程會繼續執行,就像沒有調用 Sleep(0)一樣。
當 timeout > 0 時,如:Sleep(1),會引發線程上下文切換:調用線程會從線程調度器的可運行隊列中被移除一段時間,這個時間段約等于 timeout 所指定的時間長度。為什么說約等于呢?是因為睡眠時間單位為毫秒,這與系統的時間精度有關。通常情況下,系統的時間精度為 10 ms,那么指定任意少于 10 ms但大于 0 ms 的睡眠時間,均會向上求值為 10 ms。
閱讀全文