青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 2, 文章 - 73, 評論 - 60, 引用 - 0
數據加載中……

WaitForMultipleObjects用法探索

WaitForMultipleObjectsWindows中的一個功能非常強大的函數,幾乎可以等待Windows中的所有的內核對象(關于該函數的描述和例子見MSDN,)。但同時該函數在用法上卻需要一定的技巧。

原型DWORD WaitForMultipleObjects(
 DWORD nCount,
 const HANDLE* lpHandles,
 BOOL bWaitAll,
 DWORD dwMilliseconds
);

 

WaitForMultipleObjects等到多個內核對象的時候,如果它的bWaitAll 參數設置為false。其返回值減去WAIT_OBJECT_0 就是參數lpHandles數組的序號。如果同時有多個內核對象被出發,這個函數返回的只是其中序號最小的那個。

問題就在這里,我們如何可以獲取所有被同時觸發的內核對象。舉個例子:我們需要在一個線程中處理從完成端口、數據庫、和可等待定時器來的數據。一個典型的實現方法就是:用WaitForMultipleObjects等待所有的這些事件。如果完成端口,數據庫發過來的數據量非常大,可等待定時器時間也只有幾十毫秒。那么這些事件同時觸發的幾率可以說非常大,我們不希望丟棄任何一個被觸發的事件。那么如何能高效地實現這一處理呢?

MSDN中有一句非常重要的描述,它可以說是WaitForMultipleObjects用法的精髓:The function modifies the state of some types of synchronization objects. Modification occurs only for the object or objects whose signaled state caused the function to return. For example, the count of a semaphore object is decreased by one. When bWaitAll is FALSE, and multiple objects are in the signaled state, the function chooses one of the objects to satisfy the wait; the states of the objects not selected are unaffected.

多個內核對象被觸發時,WaitForMultipleObjects選擇其中序號最小的返回。而WaitForMultipleObjects它只會改變使它返回的那個內核對象的狀態。

這兒又會產生一個問題,如果序號最小的那個對象頻繁被觸發,那么序號比它大的內核對象將得不到被處理的機會。

為了解決這一問題,可以采用雙WaitForMultipleObjects檢測機制來實現。見下面的例子:

DWORD WINAPI ThreadProc(LPVOID lpParameter)

{

    DWORD dwRet = 0;

    int   nIndex = 0;

    while(1)

    {

        dwRet = WaitForMultipleObjects(nCount,pHandles,false,INFINITE);

 

        switch(dwRet)

        {

        case WAIT_TIMEOUT:

            break;

        case WAIT_FAILED:

            return 1;

        default:

            {

                nIndex = dwRet - WAIT_OBJECT_0;

 

                ProcessHanlde(nIndex++);

                //同時檢測其他的事件

                while(nIndex < nCount)

                {

                    dwRet = WaitForMultipleObjects(nCount - nIndex,&pHandles[nIndex],false,0);

 

                    switch(dwRet)

                    {

                    case WAIT_TIMEOUT:

                        nIndex = nCount; //退出檢測,因為沒有被觸發的對象了.

                        break;

                    case WAIT_FAILED:

                        return 1;

                    default:

                        {

                            nIndex = dwRet - WAIT_OBJECT_0;

                            ProcessHanlde(nIndex++);

                        }

                        break

                    }

                }

            }

            break;

        }

    }

    return 0;

}

posted on 2007-12-25 11:09 郭天文 閱讀(3844) 評論(1)  編輯 收藏 引用 所屬分類: VC++Windows Mobile

評論

# re: WaitForMultipleObjects用法探索  回復  更多評論   

解決辦法真巧妙,支持!
2010-02-04 13:04 | mark
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产天堂网精品网站| 久久精品午夜| 亚洲国产精品尤物yw在线观看 | 午夜精彩视频在线观看不卡| 亚洲精品网址在线观看| 欧美精品在线播放| 亚洲永久在线观看| 欧美亚洲综合在线| 亚洲福利国产精品| 日韩特黄影片| 国产精品一区二区视频| 久久精品免费看| 久久亚洲国产成人| 99视频在线精品国自产拍免费观看| 亚洲黄色小视频| 国产精品国产三级国产专播精品人 | 亚洲丝袜av一区| 欧美人成在线视频| 欧美一二三区精品| 午夜在线视频观看日韩17c| 国产精品夜色7777狼人| 久久精品综合一区| 久久美女性网| 一区二区三区国产盗摄| 亚洲欧美国产毛片在线| 136国产福利精品导航网址| 亚洲精品欧洲| 国产婷婷色一区二区三区| 美女成人午夜| 欧美三区在线| 欧美不卡视频一区| 国产精品美女久久久| 老司机午夜精品| 欧美精品久久久久久久| 欧美成人激情视频免费观看| 欧美视频日韩视频在线观看| 国产精品一区二区三区四区| 美女主播一区| 欧美先锋影音| 欧美激情视频网站| 国产美女精品视频| 亚洲人人精品| 国内精品久久久久久影视8| 亚洲国产一区二区三区a毛片| 国产精品视频xxxx| 亚洲二区精品| 亚洲一区二区视频在线| 欧美国产日韩xxxxx| 国产精品免费区二区三区观看| 欧美高清成人| 经典三级久久| 久久gogo国模啪啪人体图| 正在播放欧美视频| 欧美电影在线播放| 欧美不卡在线| 在线不卡中文字幕播放| 久久爱www| 久久精品天堂| 国外精品视频| 久久成人综合视频| 欧美在线啊v一区| 国产精品乱码妇女bbbb| 亚洲一级电影| 免费久久99精品国产| 亚洲二区在线视频| 欧美激情亚洲国产| 在线观看日韩国产| 久久精品人人做人人爽电影蜜月| 欧美亚洲视频一区二区| 国产精品乱子久久久久| 亚洲一二三四区| 亚洲欧美视频在线| 国产精品久久久久一区二区三区共| 日韩午夜在线视频| 一区二区三区三区在线| 欧美日韩黄视频| 日韩视频在线观看一区二区| 一本色道久久综合亚洲精品不 | 麻豆成人小视频| 精品成人在线视频| 久久精品国产免费| 久久久之久亚州精品露出| 黄色资源网久久资源365| 欧美一区二区三区在线观看| 久久国产一二区| 黄色工厂这里只有精品| 久久精品91| 欧美成人午夜| 一本一本久久a久久精品综合妖精| 免费在线观看一区二区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲成人影音| 欧美午夜电影在线观看| 亚洲欧美日韩国产中文| 久久麻豆一区二区| 亚洲国产欧美在线人成| 欧美xart系列在线观看| 一本久久a久久免费精品不卡| 午夜精品久久一牛影视| 精东粉嫩av免费一区二区三区| 久久精品免费观看| 亚洲高清一二三区| 99av国产精品欲麻豆| 欧美视频在线观看 亚洲欧| 午夜在线精品| 亚洲成人中文| 欧美一级日韩一级| 亚洲高清资源综合久久精品| 欧美成人一品| 欧美一区二区精美| 亚洲电影激情视频网站| 欧美怡红院视频一区二区三区| 亚洲看片免费| 一区二区三区在线不卡| 国产精品久久久久高潮| 老色批av在线精品| 亚洲欧美日韩视频一区| 亚洲第一黄网| 久久米奇亚洲| 午夜精彩视频在线观看不卡 | 国产精品久久7| 免费成年人欧美视频| 亚洲欧美日韩一区在线观看| 亚洲国产日韩欧美| 免费日韩视频| 久久一区亚洲| 午夜精品亚洲一区二区三区嫩草| 亚洲福利在线看| 韩国在线视频一区| 国产欧美一区二区在线观看| 欧美日韩一区二区三区| 欧美风情在线观看| 免费在线一区二区| 美女精品一区| 一区二区精品| 国产美女精品人人做人人爽| 亚洲综合国产激情另类一区| 亚洲日本一区二区三区| 欧美国产精品日韩| 欧美福利影院| 欧美成人精品h版在线观看| 久久资源av| 久久亚洲国产精品一区二区| 欧美一区二区三区视频在线| 欧美一区二区三区另类| 性色av香蕉一区二区| 欧美一区二区三区免费在线看| 午夜精品国产精品大乳美女| 宅男噜噜噜66一区二区| 亚洲视频成人| 午夜久久电影网| 欧美亚洲综合在线| 欧美一区二区精品| 欧美中文字幕视频| 久久久久久久高潮| 欧美成年人视频| 亚洲清纯自拍| 中文亚洲免费| 欧美一区二视频在线免费观看| 欧美一区二区三区免费视| 久久av二区| 免费成人在线视频网站| 欧美日韩第一区| 国产精品美女主播| 国内精品久久久久久久影视麻豆| 亚洲最新视频在线播放| 性欧美18~19sex高清播放| 亚洲欧美日韩视频二区| 久久精品av麻豆的观看方式| 老牛国产精品一区的观看方式| 欧美成人tv| 99国产精品自拍| 香蕉亚洲视频| 欧美精品18| 国产亚洲欧美在线| 亚洲免费av网站| 欧美一级播放| 亚洲高清免费| 午夜久久电影网| 欧美大片va欧美在线播放| 欧美亚州在线观看| 伊人成人网在线看| 亚洲小说欧美另类社区| 久久久久久伊人| 亚洲精品视频啊美女在线直播| 亚洲欧美欧美一区二区三区| 久久漫画官网| 国产麻豆综合| 亚洲视频免费看| 欧美v日韩v国产v| 午夜精品一区二区三区电影天堂| 久久综合狠狠| 国产偷久久久精品专区| 99视频日韩| 免费中文日韩| 欧美中文字幕在线视频| 国产精品久久久久久久久久免费| 亚洲国产成人久久| 久久精品人人做人人爽| 一本一本久久a久久精品综合妖精|