新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > wince 等待函數

        wince 等待函數

        作者: 時間:2016-09-12 來源:網絡 收藏

        等待函數是使一個線程自愿進入等待狀態,直到指定的內核對象被出發為止。注意如果線程在調用的一個等待函數的時候,相應的內核對象已經處于觸發狀態,那么線程是不會進入等待狀態的。等待函數經常用來阻塞線程來進行同步,在IST中用到來等待相應的中斷事件。常用的等待函數是:WaitForSingleObject()。函數原型如下:

        本文引用地址:http://www.104case.com/article/201609/304604.htm

        DWORD 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中間的任何一個值,即我們在第二個參數中傳遞給函數的句柄數組的一個索引,用來告訴我們被觸發的是哪個對象。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 巫溪县| 西平县| 久治县| 昭通市| 夹江县| 泰宁县| 万山特区| 祁阳县| 灯塔市| 星子县| 拉萨市| 铁岭市| 平遥县| 余姚市| 沭阳县| 印江| 明水县| 台前县| 漳州市| 高阳县| 五家渠市| 偏关县| 金昌市| 廉江市| 磐安县| 三都| 常德市| 五大连池市| 石台县| 江城| 泰宁县| 开远市| 永泰县| 东兰县| 北川| 铁岭县| 泰兴市| 安陆市| 易门县| 屯昌县| 南丹县|