欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
WaitForMultipleObjects用法探索
WaitForMultipleObjects是Windows中的一個(gè)功能非常強大的函數,
幾乎可以等待Windows中的所有的內核對象(關(guān)于該函數的描述和例子見(jiàn)MSDN,)。
但同時(shí)該函數在用法上卻需要一定的技巧。
原型:
DWORD WaitForMultipleObjects(   DWORD nCount,   const HANDLE* lpHandles,   BOOL bWaitAll,  DWORD dwMilliseconds );
當WaitForMultipleObjects等到多個(gè)內核對象的時(shí)候,如果它的bWaitAll 參數設置為false。
其返回值減去WAIT_OBJECT_0 就是參數lpHandles數組的序號。
如果同時(shí)有多個(gè)內核對象被出發(fā),這個(gè)函數返回的只是其中序號最小的那個(gè)。
問(wèn)題就在這里,我們如何可以獲取所有被同時(shí)觸發(fā)的內核對象。
舉個(gè)例子:我們需要在一個(gè)線(xiàn)程中處理從完成端口、數據庫、和可等待定時(shí)器來(lái)的數據。
一個(gè)典型的實(shí)現方法就是:用WaitForMultipleObjects等待所有的這些事件。
如果完成端口,數據庫發(fā)過(guò)來(lái)的數據量非常大,可等待定時(shí)器時(shí)間也只有幾十毫秒。
那么這些事件同時(shí)觸發(fā)的幾率可以說(shuō)非常大,我們不希望丟棄任何一個(gè)被觸發(fā)的事件。
那么如何能高效地實(shí)現這一處理呢?
MSDN中有一句非常重要的描述,它可以說(shuō)是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.
多個(gè)內核對象被觸發(fā)時(shí),WaitForMultipleObjects選擇其中序號最小的返回。
而WaitForMultipleObjects它只會(huì )改變使它返回的那個(gè)內核對象的狀態(tài)。
這兒又會(huì )產(chǎn)生一個(gè)問(wèn)題,如果序號最小的那個(gè)對象頻繁被觸發(fā),
那么序號比它大的內核對象將的不到被出理的機會(huì )。
為了解決這一問(wèn)題,可以采用雙WaitForMultipleObjects檢測機制來(lái)實(shí)現。見(jiàn)下面的例子:
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++);
//同時(shí)檢測其他的事件
while(nIndex < nCount)
{
dwRet = WaitForMultipleObjects(nCount - nIndex,&pHandles[nIndex],false,0);
switch(dwRet)
{
case WAIT_TIMEOUT:
nIndex = nCount; //退出檢測,因為沒(méi)有被觸發(fā)的對象了.
break;
case WAIT_FAILED:
return 1;
default:
{
nIndex = dwRet - WAIT_OBJECT_0;
ProcessHanlde(nIndex++);
}
break
}
}
}
break;
}
}
return 0;
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WaitForSingleObject函數的使用
同步
轉來(lái)的
WSAWaitForMultipleEvents使用疑問(wèn)
多線(xiàn)程學(xué)習筆記
Visual C++線(xiàn)程同步技術(shù)剖析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久