void CPrintArcView::OnBtnfind() 
{
   //线程1
   AfxBeginThread(&ThreadZq, (LPVOID)this, THREAD_PRIORITY_NORMAL);   
   //线程2
   AfxBeginThread(&ThreadHn, (LPVOID)this, THREAD_PRIORITY_NORMAL);   if(线程1结束 && 线程2结束)
   {
       执行其它任务
   }
}请问如何实现?

解决方案 »

  1.   

    1  POSTTHREADMESSAGE   可以一步执行
    2  WAITFORMULTIOBJECT  需要两个EVENT,不能一步执行,程序会挂在WAITFORMULTIOBJECT 函数处
      

  2.   

    用WaitForSingleObject分别等待你两个线程结束就行了。
      

  3.   

    void   CPrintArcView::OnBtnfind()   

          //线程1 
          CWinThread t1 = AfxBeginThread(&ThreadZq,   (LPVOID)this,   THREAD_PRIORITY_NORMAL);       
          //线程2 
          CWinThread t2 = AfxBeginThread(&ThreadHn,   (LPVOID)this,   THREAD_PRIORITY_NORMAL);       WaitForSingleObject(t1.m_hThread, INFINITE);
          WaitForSingleObject(t2.m_hThread, INFINITE);
         
         { 
                  执行其它任务 
          }
      

  4.   

    lz的设计模式好像失去了多线程的意义,如果想要的目的是 两个线程执行完毕后,然后“ 执行其它任务”这样的效果,可以设置 开3个线程,第三个线程等待前两个线程结束后再执行;或者用全局变量与Timer一起来达到这个效果,设置两个全局变量,threadCtrla,theardCtrlb,在前两个线程运行开始处设置为FALSE,线程运行结束后设置为TRUE,在Timer中判断这个两个变量是否都为TRUE,如果是就“ 执行其它任务”并KillTimer
      

  5.   

    WaitForSingleObject(t1.m_hThread,   INFINITE);
                WaitForSingleObject(t2.m_hThread,   INFINITE);
             
              {  
                                执行其它任务  
                } 
      

  6.   


    BOOL g_bThFinished1 = FALSE;
    BOOL g_bThFinished2 = FALSE;WINAPI int ThreadZq()
    {
      ...  g_bThFinished1 = TRUE;
      g_DoneOther();
      return 0;
    }WINAPI int ThreadHn()
    {
      ...  g_bThFinished2 = TRUE;
      g_DoneOther();
      return 0;
    }g_DoneOther()
    {
      if (g_bThFinished1 && g_bThFinished2)
      {
          执行其它任务 
      }
    }void   CPrintArcView::OnBtnfind()   

          //线程1 
          AfxBeginThread(&ThreadZq,   (LPVOID)this,   THREAD_PRIORITY_NORMAL);       
          //线程2 
          AfxBeginThread(&ThreadHn,   (LPVOID)this,   THREAD_PRIORITY_NORMAL);       /* 去掉,否则阻塞了主线程,停止UI响应
          if(线程1结束   &&   线程2结束) 
          { 
                  执行其它任务 
          } */
      

  7.   

    若是仅仅等待线程是否退出的话,用waitforsingleobject是可以的,不过在你所说的情况下,你的主线程当然是
    被阻塞了的,看样子,只有才开一个线程啊.
      

  8.   


    void       CPrintArcView::OnBtnfind()       
    {   
        //线程1   
        CWinThread   t1   =   AfxBeginThread(&ThreadZq,(LPVOID)this,THREAD_PRIORITY_NORMAL);               
        //线程2   
        CWinThread   t2   =   AfxBeginThread(&ThreadHn,(LPVOID)this,       THREAD_PRIORITY_NORMAL);   
        WaitForSingleObject(t1.m_hThread,   INFINITE); 
        WaitForSingleObject(t2.m_hThread,   INFINITE);
        DWORD dwExitCode = 0;
        do
        {
          GetExitCodeThread(t1.Handle,&dwExitCode);
        }while(dwExitCode != 0x0000FFFF) //你事先定义好的线程安全退出码
         dwExitCode = 0;
         do
        {
          GetExitCodeThread(t2.Handle,&dwExitCode);
        }while(dwExitCode != 0x0000FFFF) //你事先定义好的线程安全退出码
        {   
                                执行其它任务   
         } 
    }   
      

  9.   

    另外加上
    t1.SetEvent(t1.m_hExit);//通知t1线程进行结束操作
    t2.SetEvent(t2.m_hExit);//通知t2线程进行结束操作