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

时间:2014-01-20 13:29:46

标签: c++ visual-c++ mfc

我在主线程中使用::WaitForSingleObject(event, INFINITE),在子线程中我在完成子线程时使用::SetEvent(event)。但它不起作用。我想知道为什么?

2 个答案:

答案 0 :(得分:0)

等待线程退出的一种标准方法是将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_SENDMESSAGEdwWakeMask。请注意,如果那不是你等待的那个,你必须再次检查觉醒条件。

答案 1 :(得分:0)

我发现了我的问题。 当主线程待机时,在子线程中我调用消息并发送到主线程。它似乎是死锁。