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

隨筆 - 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 郭天文 閱讀(3834) 評論(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>
            欧美亚洲三级| 国产主播一区二区三区| 99riav久久精品riav| 麻豆亚洲精品| 欧美不卡在线| 亚洲人成网站在线播| 欧美激情一区二区三区高清视频| 欧美激情视频一区二区三区不卡| 最新亚洲电影| 亚洲欧美视频一区| 久久久久久综合| 欧美77777| 欧美性片在线观看| 国产精品视频网站| 在线看视频不卡| 一区二区三区日韩欧美精品| 久久国产精品一区二区三区四区| 久久亚洲综合网| 亚洲精品国久久99热| 午夜久久久久久久久久一区二区| 久久视频这里只有精品| 欧美日韩久久| 国产精品无码永久免费888| 欧美成人dvd在线视频| 欧美日韩免费高清| 国产一区二区三区久久悠悠色av| 亚洲精品国产精品乱码不99| 亚洲视频导航| 欧美成人精品福利| 国产精品99久久不卡二区| 久久免费一区| 国产精品一区免费在线观看| 最新日韩欧美| 久久中文欧美| 亚洲天堂第二页| 浪潮色综合久久天堂| 欧美四级在线观看| 亚洲日本国产| 蜜桃av噜噜一区二区三区| 亚洲视频日本| 欧美日韩亚洲视频一区| 亚洲欧洲一区二区三区久久| 久久久福利视频| 亚洲一区久久久| 欧美日韩精品一区二区三区| 亚洲人成在线观看| 欧美91福利在线观看| 欧美中文字幕视频在线观看| 欧美色精品天天在线观看视频 | 国产综合网站| 亚洲视频在线视频| 亚洲激情成人网| 免费观看日韩av| 激情欧美一区二区| 久久精品日韩| 欧美在线看片| 国产一区二区在线观看免费播放| 午夜在线精品偷拍| 亚洲一区免费网站| 国产精品久久午夜夜伦鲁鲁| 亚洲视频在线观看一区| 亚洲乱码国产乱码精品精天堂 | 亚洲欧美国产不卡| 亚洲欧洲日本专区| 欧美人妖在线观看| 亚洲午夜一区二区| 一本久道久久综合婷婷鲸鱼| 欧美日韩亚洲精品内裤| 亚洲欧美日韩国产一区二区三区| 夜色激情一区二区| 国产精品网站在线| 久久网站热最新地址| 久久国产欧美精品| 亚洲大片精品永久免费| 欧美国产日韩在线观看| 欧美激情视频一区二区三区免费| 欧美少妇一区| 欧美日韩在线视频观看| 亚洲一级在线观看| 亚洲制服欧美中文字幕中文字幕| 国产伦精品一区二区三区高清| 欧美在线视频一区二区三区| 欧美影院视频| 亚洲国产欧美一区二区三区丁香婷| 欧美成人精品| 欧美日韩黄色大片| 欧美一区亚洲一区| 蜜桃精品一区二区三区| 一区二区国产精品| 亚洲一区尤物| 亚洲国产另类精品专区| aa日韩免费精品视频一| 国产精品永久| 欧美高清在线一区二区| 国产精品国产自产拍高清av| 久久另类ts人妖一区二区| 欧美黄色一区| 久久精品91久久香蕉加勒比 | 久久久女女女女999久久| 亚洲区一区二区三区| 亚洲一区二区久久| 最新国产成人在线观看| 亚洲欧美视频一区| 99视频精品全国免费| 亚洲欧美一区二区原创| 亚洲精品一区二区在线观看| 先锋影音一区二区三区| 亚洲精品三级| 欧美在线视频免费| 亚洲一区二区三区免费在线观看| 欧美一区视频| 亚洲自拍啪啪| 欧美激情第五页| 暖暖成人免费视频| 国产精品无码永久免费888| 亚洲精品麻豆| 亚洲第一精品在线| 欧美一级视频免费在线观看| 亚洲在线国产日韩欧美| 免费在线国产精品| 美女91精品| 国产酒店精品激情| 一区二区三区视频在线播放| 亚洲国产精选| 久久伊伊香蕉| 免费亚洲一区| 在线精品视频免费观看| 欧美在线观看视频一区二区三区| 亚洲免费视频网站| 欧美日韩成人网| 亚洲精品三级| 日韩手机在线导航| 欧美高清你懂得| 亚洲国产成人tv| 亚洲日产国产精品| 蜜臀a∨国产成人精品| 麻豆精品在线观看| 在线观看日产精品| 快播亚洲色图| 亚洲破处大片| 亚洲影音一区| 欧美一区二区免费| 欧美黄色成人网| 亚洲片区在线| 亚洲专区在线视频| 国产精品区一区| 亚洲在线视频观看| 亚洲欧美另类久久久精品2019| 欧美午夜不卡在线观看免费| 亚洲免费观看视频| 亚洲欧美国产制服动漫| 国产精品一国产精品k频道56| 亚洲免费在线看| 久久久蜜桃一区二区人| 红桃视频成人| 欧美成人资源网| 一区二区三欧美| 欧美中文在线免费| 一区三区视频| 欧美日韩国产欧美日美国产精品| 一本色道久久88综合亚洲精品ⅰ | 午夜精品久久久久久久99黑人| 亚洲欧美国产日韩天堂区| 国产日韩1区| 免费不卡中文字幕视频| 日韩视频中午一区| 欧美在线关看| 亚洲激情校园春色| 国产精品户外野外| 久久久精品动漫| 亚洲精品网址在线观看| 西瓜成人精品人成网站| 亚洲电影网站| 国产精品国产亚洲精品看不卡15| 久久久久久久91| 一区二区三区免费观看| 久久综合九色综合欧美狠狠| 日韩天堂在线观看| 国产日本精品| 欧美日韩精品一区视频| 久久久久国产一区二区三区| 日韩一区二区精品葵司在线| 久久精品综合一区| 在线亚洲美日韩| 亚洲国产一区二区视频| 国产精自产拍久久久久久蜜| 欧美精品免费视频| 久久精品视频免费| 亚洲午夜在线观看视频在线| 欧美激情精品久久久久久免费印度| 亚洲免费在线看| a91a精品视频在线观看| 国产专区一区| 国产嫩草影院久久久久| 欧美日韩国产一区二区| 老牛影视一区二区三区| 性欧美办公室18xxxxhd| 在线亚洲激情| av成人免费在线| 亚洲乱码国产乱码精品精可以看|