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

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

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

開(kāi)通VIP
在用戶(hù)線(xiàn)程/主線(xiàn)程中推薦MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函數

在多線(xiàn)程編程中,通常都需要線(xiàn)程間的同步,一個(gè)線(xiàn)程要等待另一個(gè)線(xiàn)程的事件才繼續執行,一般的做法是采用WaitForSingleObject和WaitForMultipleObjects()函數來(lái)實(shí)現。
但在實(shí)際的應用中,經(jīng)常出現等待線(xiàn)程卡死的狀況,也就是說(shuō)等待的事件一直無(wú)效。為什么事件一直無(wú)效呢?很多的情況是等待線(xiàn)程阻塞了另外的線(xiàn)程,使另外的線(xiàn)程無(wú)法設置事件有效。為什么會(huì )阻塞呢?原因就比較多了,需要具體問(wèn)題具體分析。

 WaitForSingleObject和WaitForMultipleObjects()都是阻塞函數,事件無(wú)效就一直不返回,從而阻塞該線(xiàn)程,使該線(xiàn)程無(wú)法處理其他的事務(wù),如果其他的線(xiàn)程發(fā)送消息過(guò)來(lái),將得不到處理而不返回,從而將其他的線(xiàn)程也阻塞,造成相互等待,這就是臭名昭著(zhù)的“死鎖”?。?!

  微軟提供了另外一個(gè)函數可以解決該問(wèn)題,它就是MsgWaitForMultipleObjects()函數,該函數不但可以等待事件,還可以等待消息,從而處理消息,使線(xiàn)程不阻塞。該函數的具體解釋前參考MSDN或網(wǎng)絡(luò )。

一般的使用方法為:

  1. DWORD dwRet = 0;    
  2. MSG msg;  
  3. DWORD dwStartTime = GetTickCount();   
  4. while (TRUE)    
  5.   {   
  6. //超時(shí)判斷  5s  
  7.                dwRet = GetTickCount() - dwStartTime;  
  8. if ((GetTickCount() - dwStartTime) > 10000)  
  9. {  
  10. AfxMessageBox(_T("獲取數據超時(shí),請檢測設備網(wǎng)絡(luò )連接!"), MB_OK | MB_ICONERROR);  
  11. return NULL;  
  12. }  
  13.   
  14. //wait for m_hThread to be over,and wait for    
  15. //QS_ALLINPUT(Any message is in the queue)   
  16.                //dwRet = WaitForSingleObject(g_hRetEvent, INFINITE);  
  17. dwRet = MsgWaitForMultipleObjects (1, &g_hRetEvent, FALSE, 100, QS_ALLINPUT);    
  18.   switch(dwRet)    
  19. {    
  20. case WAIT_OBJECT_0: //返回數據達到  
  21. break; //break the loop    
  22. case WAIT_OBJECT_0 + 1: //界面消息  
  23. //get the message from Queue    
  24.   //and dispatch it to specific window    
  25. if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))  
  26. {  
  27. TranslateMessage(&msg);  
  28. DispatchMessage(&msg);     
  29. }  
  30. continue;   
  31. case WAIT_TIMEOUT: //超時(shí)  
  32. continue;  
  33. default:   
  34.   AfxMessageBox(_T("數據獲取失敗,未知錯誤!"), MB_OK | MB_ICONERROR);  
  35.   return NULL;  
  36. break; // unexpected failure    
  37. }   
  38.   break;  
  39. }  

特別是在主線(xiàn)程和界面線(xiàn)程中推薦使用該函數,可以避免很多麻煩?。?!

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何暫停主線(xiàn)程直到第二個(gè)線(xiàn)程的終止? - Chenxinyi's Weblog - CSD...
在主線(xiàn)程中慎用WaitForSingleObject (WaitForMultipleOb...
線(xiàn)程函數的設計以及線(xiàn)程同步要點(diǎn)(MsgWaitForMultipleObjects等)
線(xiàn)程啟動(dòng)后界面假死的故障排除
WaitForSingleObject函數的使用
Windows核心編程(第五版)筆記 第九章 利用內核對象同步線(xiàn)程(Thread Sync...
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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