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