• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            羅朝輝(飄飄白云)

            關(guān)注嵌入式操作系統(tǒng),移動(dòng)平臺(tái),圖形開(kāi)發(fā)。-->加微博 ^_^

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評(píng)論 :: 0 Trackbacks

            深入分析Sleep(0)與Sleep(1)的區(qū)別
            羅朝輝 (http://www.shnenglu.com/kesalin/)
            CC許可,轉(zhuǎn)載請(qǐng)注明出處
            目的:
            有時(shí)候我們想讓線程不被調(diào)度一定的時(shí)間,也就是說(shuō)讓線程睡眠一段時(shí)間。

             


            API 接口:

            在 Win32中可以調(diào)用 Sleep,SleepEx 和 SwitchToThread 三個(gè)API。

            VOID WINAPI Sleep(DWORD dwMilliseconds);

            DWORD WINAPI SleepEx(DWORD dwMilliseconds, BOOl bAlertable);

            BOOl WINAPI SwitchToThread();


            在托管代碼中,我們可以調(diào)用靜態(tài)方法 Thread.Sleep。


            分析:

            Sleep 接口均帶有表示睡眠時(shí)間長(zhǎng)度的參數(shù) timeout。調(diào)用以上提到的 Sleep 接口,會(huì)有條件地將調(diào)用線程從當(dāng)前處理器上移除,并且有可能將它從線程調(diào)度器的可運(yùn)行隊(duì)列中移除。這個(gè)條件取決于調(diào)用 Sleep 時(shí)timeout 參數(shù)。


            當(dāng) timeout = 0, 即 Sleep(0),如果線程調(diào)度器的可運(yùn)行隊(duì)列中有大于或等于當(dāng)前線程優(yōu)先級(jí)的就緒線程存在,操作系統(tǒng)會(huì)將當(dāng)前線程從處理器上移除,調(diào)度其他優(yōu)先級(jí)高的就緒線程運(yùn)行;如果可運(yùn)行隊(duì)列中的沒(méi)有就緒線程或所有就緒線程的優(yōu)先級(jí)均低于當(dāng)前線程優(yōu)先級(jí),那么當(dāng)前線程會(huì)繼續(xù)執(zhí)行,就像沒(méi)有調(diào)用 Sleep(0)一樣。


            當(dāng) timeout > 0 時(shí),如:Sleep(1),會(huì)引發(fā)線程上下文切換:調(diào)用線程會(huì)從線程調(diào)度器的可運(yùn)行隊(duì)列中被移除一段時(shí)間,這個(gè)時(shí)間段約等于 timeout 所指定的時(shí)間長(zhǎng)度。為什么說(shuō)約等于呢?是因?yàn)樗邥r(shí)間單位為毫秒,這與系統(tǒng)的時(shí)間精度有關(guān)。通常情況下,系統(tǒng)的時(shí)間精度為 10 ms,那么指定任意少于 10 ms但大于 0 ms 的睡眠時(shí)間,均會(huì)向上求值為 10 ms。

            而調(diào)用 SwitchToThread() 方法,如果當(dāng)前有其他就緒線程在線程調(diào)度器的可運(yùn)行隊(duì)列中,始終會(huì)讓出一個(gè)時(shí)間切片給這些就緒線程,而不管就緒線程的優(yōu)先級(jí)的高低與否。

            結(jié)論:
            由上面的分析可以看出,如果我們想讓當(dāng)前線程真正睡眠一下子,最好是調(diào)用 Sleep(1) 或 SwitchToThread()

            posted on 2012-10-11 20:04 羅朝輝 閱讀(6856) 評(píng)論(2)  編輯 收藏 引用 所屬分類: C/C++Windows

            評(píng)論

            # re: 深入分析Sleep(0)與Sleep(1)的區(qū)別[未登錄](méi) 2012-10-11 21:08 123
            原來(lái)是這樣的講究,感謝分享  回復(fù)  更多評(píng)論
              

            # re: 深入分析Sleep(0)與Sleep(1)的區(qū)別 2012-10-14 17:25 溪流
            學(xué)習(xí)了  回復(fù)  更多評(píng)論
              

            婷婷久久综合九色综合98| 无码久久精品国产亚洲Av影片| 久久精品aⅴ无码中文字字幕重口| 精品久久久久久成人AV| 伊人久久大香线蕉亚洲五月天| 久久精品中文闷骚内射| 久久精品国产精品亚洲精品| 国产产无码乱码精品久久鸭| 99精品国产综合久久久久五月天 | 国产一级做a爰片久久毛片| 91亚洲国产成人久久精品网址| 亚洲精品成人久久久| 久久国产免费观看精品| 色婷婷综合久久久久中文一区二区 | 亚洲国产精品久久久久网站| 国产香蕉久久精品综合网| 久久93精品国产91久久综合| 精品久久一区二区| 久久夜色精品国产www| 国产高潮国产高潮久久久91| 天天久久狠狠色综合| 久久久久久无码国产精品中文字幕 | 日产精品久久久久久久| 久久中文字幕无码专区| 久久久WWW成人| 大香伊人久久精品一区二区| 青草国产精品久久久久久| 国内精品久久久久久99蜜桃| 久久综合鬼色88久久精品综合自在自线噜噜| 久久亚洲欧美国产精品| 久久久久国产| 模特私拍国产精品久久| 精品久久久久久亚洲精品| 国内精品久久久久伊人av| 亚洲国产成人久久综合碰| 久久精品一区二区国产| 久久久久亚洲AV成人网| 久久精品卫校国产小美女| 中文字幕久久欲求不满| 亚洲精品乱码久久久久久久久久久久 | 久久久久国产精品熟女影院|