wince 等待函數
等待函數是使一個線程自愿進入等待狀態,直到指定的內核對象被出發為止。注意如果線程在調用的一個等待函數的時候,相應的內核對象已經處于觸發狀態,那么線程是不會進入等待狀態的。等待函數經常用來阻塞線程來進行同步,在IST中用到來等待相應的中斷事件。常用的等待函數是:WaitForSingleObject()。函數原型如下:
本文引用地址:http://www.104case.com/article/201609/304604.htmDWORD WaitForSingleObject(
HANDLE hObject,
DWORD dwMilliseconds);
第一個參數hObject代表要等帶的內核對象,第二個參數dwMilliseconds代表要等待的毫秒數。如果到等待的時間到達,內核對象還沒有被觸發,則函數返回等待超時。
在wince中可以用來被等待的內核對象有:進程,線程,作業,文件以及控制臺的標準輸入流/輸出流/錯誤流,事件,可等待的計時器,信號量,互斥量。其中事件,可等待的計時器,信號量以及互斥量是windows提供的專門用來線程同步的內核對象。
對第二個參數經常傳遞INFINITE,就是0xFFFFFFFF(-1)。當傳遞INFINITE的時候代表如果等待的內核對象永遠不被觸發,那么調用的線程就永遠不會被喚醒,它會一直等待下去。當然在等待的過程中并沒有占用CPU。
函數的返回值代表為什么調用線程又能夠繼續執行(線程進入就緒狀態)。
WAIT_OBJECT_0:代表等待的內核對象被觸發。
WAIT_TIMEOUT:代表等待超時。
WAIT_FAILED:代表傳入的無效的參數,這時調用GetLastError可以獲得更為詳細的信息。
WaitForSingleObject是等帶一個內核對象被觸發。而WaitForMultipleObjects允許調用線程同時檢查多個內核對象的觸發狀態,其函數原型如下:
DWORD WaitForMultipleObjects(
DWORD dwCount,
CONST HANDLE * phObjects,
BOOL bWaitAll,
DWORD dwMilliseconds);
dwCount表示我們要檢測的內核對象的個數。這個值必須在1-MAXIMUM_WAIT_OBJECTS之間。phObjects是一個指針,指向一個內核對象句柄的數組。bWaitALL為TRUE時表示要等所有的內核對象都被觸發,為FALSE時表示所等待的內核對象中有一個被觸發時,線程就會被喚醒。最后一個參數與WaitForSingleObject中的那個一樣。
WaitForMultipleObjects函數的返回值告訴調用函數為什么它能過繼續運行。可以返回的值包括WAIT_FAILED和WAIT_TIMEOUT。
如果bWaitAll為True而且所有的對象都被觸發了,那么返回值是WAIT_OBJECT_0.
如果bWaitAll為False,那么只要任何一個對象被觸發,函數就會立刻返回。這時返回值是WAIT_OBJECT_0和WAIT_OBJECT_0+dwCount-1中間的任何一個值,即我們在第二個參數中傳遞給函數的句柄數組的一個索引,用來告訴我們被觸發的是哪個對象。
評論