在mfc中一个线程如何等待所有的线程结束?例如 我用for循环创建了100个线程A,然后我创建1个线程B,然后线程B需要等待所有的线程A执行完毕之后,线程B才开始执行。 for (int i=0;i<100;i++)
{ CWinThread *pA=AfxBeginThread(函数A); pA->ResumeThread();
} CWinThread *pB=AfxBeginThread(函数B);
pB->ResumeThread();
类似这样代码。请指教

解决方案 »

  1.   

    用WaitForMultipleObjects,把你的线程用数组保存
      

  2.   

    查看MSDN
    DWORD WaitForMultipleObjects(
      DWORD nCount,
      const HANDLE* lpHandles,
      BOOL bWaitAll,
      DWORD dwMilliseconds
    );
    函数用法,
    让所有A现成HANDLE保存在一个数组中HANDLE handle[100];
    handle[...] = CThread.m_hThread;
    B里面
    WaitForMultipleObjects(100, handle, TRUE, INFINITE);
    然后返回值为WAIT_OBJECT_0时为所有A执行完成..
      

  3.   

    希望能详细一点,WaitForMultipleObjects 有限制。代码能够详细一些
      

  4.   

    线程A是你创建的,所以你可以定义一个数组结构保存各个线程的执行情况,结束以后各个线程就到这个结构中标明一下,说明自己已经执行完了。而线程B你也不用挂机它,也让它执行起来,不过线程一开始就进入检测状态,检查各个线程是否结束,如果没有结束则一直检测,如:
    while(true)
    {
        if(IsAllThreadFinished())//检查所有的A线程是否结束
            break;
        Sleep(100);
    }
    .........
    .........
    //线程B的其他语句
      

  5.   

    实现IsAllThreadFinished())有什么好的方法
      

  6.   

    先降线程的ID写到一个数组里,然后查这些ID是否都运行完毕即可。
      

  7.   

    WaitForMultipleObjects(100, handle, TRUE, INFINITE);中DWORD nCount, nCount最大值为64
      

  8.   

    不用搞那么麻烦,用信号量嘛,创建时初值为0,最大值为100,每个A线程退出是对信号量RELEASE一次,在B线程中循环WAITFORSINGLEOBJECT做100次
      

  9.   

    那等两个
    while(1)
    {
       if ( WaitForMultipleObjects(50, handle1, TRUE, 0)==WAIT_OBJECT_0 && WaitForMultipleObjects(50, handle2, TRUE, 0)==WAIT_OBJECT_0 )
        continue;}