Sleep和WaitForSingleObject,WaitForMultipleObjects

字號:

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