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