程序:
f()
{for(i=0;i<2;i++)
  m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
  f1();
}
在这个程序中,f1()不等m_pThread[i]执行完就先执行,为什么呀???
怎样才能使线程m_pThread[i]执行完后再执行后面步骤???

解决方案 »

  1.   

    f()
    {for(i=0;i<2;i++)
      m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
      WaitForSingleObject(m_pThread, -1);
      f1();
    }
      

  2.   

    ft!------------------f()
    {
      for(i=0;i<2;i++)
      {
        m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
        WaitForSingleObject(m_pThread, -1);
        f1();
      }
    }
      

  3.   

    唉,我这两个线程内都是调用com中的函数,
    不会是这个不行吧!
    用也不行!
      

  4.   

    用下面的代码试一下:
    CEvent CEventThreadEnd;//定义全局变量……//你的线程主函数
    UINT ThreadsProc(LPVOID pParam)
    {
        //具体操作
        //……    //在线程要退出时插入这句:
        CEventThreadEnd.SetEvent();
        //线程正常退出
        return 0;
    }……f()
    {for(i=0;i<2;i++)
      m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);  //加入这句
      ::WaitForSingleObject(CEventThreadEnd.m_hObject,INFINITE);  f1();
    }
      

  5.   


    f()
    {for(i=0;i<2;i++)
      //还要加一句
      CEventThreadEnd.ResetEvent();  m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);  //加入这句
      ::WaitForSingleObject(CEventThreadEnd.m_hObject,INFINITE);  f1();
    }
      

  6.   

    for(i=0;i<2;i++)
      {
        m_pThread[i]=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
       }
       WaitForMultiObject(2,m_pThread,,TRUE,INFINITE);
       f1();
    可以等到两个线程都运行结束后,才执行f1();