VOID Sleep(DWORD dwMilliseconds); 該函數(shù)可使線程暫停自己的運(yùn)行,直到dwMilliseconds過去為止。
關(guān)于Sleep函數(shù),有下面幾個(gè)重要問題值得注意:
* 調(diào)用Sleep,可使線程自愿放棄它剩余的時(shí)間片。
* 系統(tǒng)將在大約的指定毫秒數(shù)內(nèi)使線程不可調(diào)度。
* 你可以調(diào)用Sleep,并且為dwMilliseconds參數(shù)傳遞INFINITE。這將告訴系統(tǒng)永遠(yuǎn)不要調(diào)度該線程。這不是一件值得去做的事情。是讓線程退出,并還原它的堆棧和內(nèi)核對(duì)象。
* 你可以將0傳遞給Sleep。這將告訴系統(tǒng),調(diào)用線程將釋放剩余的時(shí)間片,并迫使系統(tǒng)調(diào)度另一個(gè)線程。但是,系統(tǒng)可以對(duì)剛剛調(diào)用Sleep的線程重新調(diào)度。如果不存在多個(gè)擁有相同優(yōu)先級(jí)的可調(diào)度線程,就會(huì)出現(xiàn)這種情況。
等待函數(shù)可使線程自愿進(jìn)入等待狀態(tài),直到一個(gè)特定的內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)為止。這些等待函數(shù)中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函數(shù):
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心對(duì)象
DWORD dwTimeout ) ; // 線程愿意等待的毫秒數(shù)(值為INFINITE時(shí)表示無(wú)限等待)
返回值:
返回值 定義 含義
WAIT_OBJECT_0 0x00000000 對(duì)象達(dá)到有信號(hào)
WAIT_TIMEOUT 0x00000102 對(duì)象沒有在dwTimeout毫秒內(nèi) 到達(dá)有信號(hào)狀態(tài)
WAIT_ABANDONED 0x00000080 對(duì)象是一個(gè)互斥量,由于它被放棄了而達(dá)到有信號(hào)狀態(tài)
WAIT_FAILED 0xFFFFFFFF 發(fā)生錯(cuò)誤。調(diào)用GetLastError以取得擴(kuò)展的錯(cuò)誤信息
WaitForMultipleObject函數(shù):
DWORD WaitForMultipleObject(DWORD cObject, // 檢查核心對(duì)象的數(shù)目
LPHANDLE lpHandles, // 指向這些對(duì)象的句柄的數(shù)組
BOOL bWaitAll, // 是否等待所有對(duì)象變成有信號(hào)
DWORD dwTimeout); // 線程愿意等待的時(shí)間(毫秒數(shù))
返回值:
返回值 定義 含義
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 開始當(dāng)?shù)却袑?duì)象時(shí),這一值表明等待對(duì)象成功的完成了。當(dāng)?shù)却我粚?duì)象
時(shí),這一值給出 lpHandles數(shù)組中屬于變成有信號(hào)的對(duì)象的下標(biāo)。
WAIT_TIMEOUT 0x00000102 對(duì)象或?qū)ο髠儧]有在dwTimeout毫秒內(nèi)達(dá)到有信號(hào)狀態(tài)。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
開始于0x00000080 當(dāng)?shù)却袑?duì)象時(shí),這一值指明WAIT_ABANDONED_0等待成功的完成,并且至少有一個(gè)對(duì)象是互斥量,此互斥量是由于被放棄而達(dá)到有信號(hào)的。當(dāng)?shù)却我粚?duì)象時(shí),這一值給出lpHandles數(shù)組中屬于變得有信號(hào)的互斥量的句柄的下標(biāo),此互斥量由于被放棄而達(dá)到有信號(hào)。
WAIT_FAILED 0xFFFFFFFF 發(fā)生錯(cuò)誤。 調(diào)用GetLastError以取得擴(kuò)展的錯(cuò)誤信息。
關(guān)于Sleep函數(shù),有下面幾個(gè)重要問題值得注意:
* 調(diào)用Sleep,可使線程自愿放棄它剩余的時(shí)間片。
* 系統(tǒng)將在大約的指定毫秒數(shù)內(nèi)使線程不可調(diào)度。
* 你可以調(diào)用Sleep,并且為dwMilliseconds參數(shù)傳遞INFINITE。這將告訴系統(tǒng)永遠(yuǎn)不要調(diào)度該線程。這不是一件值得去做的事情。是讓線程退出,并還原它的堆棧和內(nèi)核對(duì)象。
* 你可以將0傳遞給Sleep。這將告訴系統(tǒng),調(diào)用線程將釋放剩余的時(shí)間片,并迫使系統(tǒng)調(diào)度另一個(gè)線程。但是,系統(tǒng)可以對(duì)剛剛調(diào)用Sleep的線程重新調(diào)度。如果不存在多個(gè)擁有相同優(yōu)先級(jí)的可調(diào)度線程,就會(huì)出現(xiàn)這種情況。
等待函數(shù)可使線程自愿進(jìn)入等待狀態(tài),直到一個(gè)特定的內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)為止。這些等待函數(shù)中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函數(shù):
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心對(duì)象
DWORD dwTimeout ) ; // 線程愿意等待的毫秒數(shù)(值為INFINITE時(shí)表示無(wú)限等待)
返回值:
返回值 定義 含義
WAIT_OBJECT_0 0x00000000 對(duì)象達(dá)到有信號(hào)
WAIT_TIMEOUT 0x00000102 對(duì)象沒有在dwTimeout毫秒內(nèi) 到達(dá)有信號(hào)狀態(tài)
WAIT_ABANDONED 0x00000080 對(duì)象是一個(gè)互斥量,由于它被放棄了而達(dá)到有信號(hào)狀態(tài)
WAIT_FAILED 0xFFFFFFFF 發(fā)生錯(cuò)誤。調(diào)用GetLastError以取得擴(kuò)展的錯(cuò)誤信息
WaitForMultipleObject函數(shù):
DWORD WaitForMultipleObject(DWORD cObject, // 檢查核心對(duì)象的數(shù)目
LPHANDLE lpHandles, // 指向這些對(duì)象的句柄的數(shù)組
BOOL bWaitAll, // 是否等待所有對(duì)象變成有信號(hào)
DWORD dwTimeout); // 線程愿意等待的時(shí)間(毫秒數(shù))
返回值:
返回值 定義 含義
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 開始當(dāng)?shù)却袑?duì)象時(shí),這一值表明等待對(duì)象成功的完成了。當(dāng)?shù)却我粚?duì)象
時(shí),這一值給出 lpHandles數(shù)組中屬于變成有信號(hào)的對(duì)象的下標(biāo)。
WAIT_TIMEOUT 0x00000102 對(duì)象或?qū)ο髠儧]有在dwTimeout毫秒內(nèi)達(dá)到有信號(hào)狀態(tài)。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
開始于0x00000080 當(dāng)?shù)却袑?duì)象時(shí),這一值指明WAIT_ABANDONED_0等待成功的完成,并且至少有一個(gè)對(duì)象是互斥量,此互斥量是由于被放棄而達(dá)到有信號(hào)的。當(dāng)?shù)却我粚?duì)象時(shí),這一值給出lpHandles數(shù)組中屬于變得有信號(hào)的互斥量的句柄的下標(biāo),此互斥量由于被放棄而達(dá)到有信號(hào)。
WAIT_FAILED 0xFFFFFFFF 發(fā)生錯(cuò)誤。 調(diào)用GetLastError以取得擴(kuò)展的錯(cuò)誤信息。