在主程序里通过全局变量通知工作线程结束线程,那么我在主程序里怎么判断工作线程已经结束了?

解决方案 »

  1.   

    可以创建一个全局Event;初始化为无信号状态,线程结束后将他置为有信号状态就行了
      

  2.   

    GetExitCodeThread (HANDLE hThread, LPDWORD lpExitCode);具体的查msdn
      

  3.   

    可以通过消息通知,自定义消息ID_THREAD_END
    线程结尾的时候给主程序发SendMessage(pWnd,ID_THREAD_END,0,0);
      

  4.   

    建议用 xstring(麻雀) 的方法,其他的都不安全,因为无论是事件机制,还是消息机制,都不能保证主消息在处理事件或者消息的时候,工作线程已经结束。因为工作线程设置事件或者发送消息以后,不能保证立刻退出,而此时主线程可能已经得到工作线程已结束的信号。    DWORD nExitCode ;
        if( GetExitCodeThread( m_pYourThread->m_hThread, &nExitCode ) )
    if( nExitCode != STILL_ACTIVE )
             {
                  delete m_pYourThread
                 // 工作线程已经结束,处理后续工作
                 //  .....
              }这里要注意的是,在创建工作线程时要设置
    m_pYourThread->m_bAutoDelete = FALSE ;
    否则,线程结束后,m_pYourThread被自动删除,GetExitCodeThread()就得不到正确的返回值。另外要注意的是,上面的这段检测代码不能放在一个循环里不停地查询工作线程是否结束,因为这样导致工作线程得不到时间片来执行,使程序进入死循环。这是我摸索了很长一段时间才搞明白的经验,希望能跟大家共享。
        不知道有没有更好的办法,期待中...
      

  5.   

    m_pYourThread->m_bAutoDelete = FALSE ;
    在主线程中使用WaitForSingleObject(),比较正确!可以保证线程退出后及时得到通知