簡體   English   中英

如何在MFC中停止主線程和等待子線程

[英]How can I stop main thread and waiting sub thread in MFC

我在主線程中使用::WaitForSingleObject(event, INFINITE) ,在子線程中,當完成子線程時,我使用::SetEvent(event) 但這行不通。 我想知道為什么??

等待線程退出的一種標准方法是將WaitForSingleObject與線程的句柄一起使用,而這樣做的可靠性包括使用_beginthreadex創建線程。

HANDLE hThread = reinterpret_cast<HANDLE>( _beginthreadex( ... ) );
if ( hThread ) {
   DWORD dwRet = WaitForSingleObject( hThread, INIFINITE );
   if ( dwRet == WAIT_OBJECT_0 ) {
      // OK
   } else {
      // Error
   }
   CloseHandle( hThread );
} else {
   // Error
}

通過AfxBeginThread創建的線程的句柄可以通過CWinThread::m_hThread成員獲得。

請不要以為在線程退出時同步阻塞可能會首先質疑創建線程的想法。

同樣請注意,如果主線程具有GUI,則阻塞主線程(尤其是使用INFINITE參數)似乎不是一個好主意。

編輯:您可以在處理已發送消息的同時進行阻止等待。 使用MsgWaitForMultipleObjectsEx API,將QS_SENDMESSAGE用作dwWakeMask 請注意,如果不是等待狀態,則必須再次檢查喚醒條件。

我發現了問題。 當主線程待命時,在子線程中,我調用消息並發送到主線程。 好像是死鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM