有主程序
while(rolSentence!=NULL)

 bool re=myFirstConvertFunGraph.Parse(rolSentence->cixing);
 
  ....

在myFirstConvertFunGraph.Parse(rolSentence->cixing);中会创建了多个线程,必须等这些线程都执行完毕才能进行下一次的循环判断,不然分析结果为混乱,请问:如何知道主程序本次创建的线程都执行完毕?

解决方案 »

  1.   

    WaitForMultipleObjects, 等待在这些线程的句柄上
      

  2.   

    因为进入这个函数前我不知道会创建多少个线程序,而且在这个函数里,可能是先创建2个线程后,在这两个线程中有创建有其它线程序,是线程创建线程.
    是不是在bool re=myFirstConvertFunGraph.Parse(rolSentence->cixing);下面写,写成:
     waitforMultipleObjects(n , hThread,True,Infinite);
    但可能这所有线程还没有创建完呢,myFirstConvertFunGraph.Parse(rolSentence->cixing);就执行完了,返回了,那怎么弄
      

  3.   

    总有一个地方是知道一次性创建了多少个线程的吧? 比如在myFirstConvertFunGraph.Parse(rolSentence->cixing);
    里?
    那就在这个函数里创建完所有线程后执行Wait如果一个子线程又创建了孙线程,那么在子线程退出之前强制它必须等待由其创建的孙线程....只能这样了,我也没想到啥好办法
      

  4.   

    对我也这样想的,但我不知道这个子线程要创建多少个孙线程,可否先创建,足够大的  HANDLE hThread[15];
    比方说15个,然后,最后写成waitforMultipleObjects(6 , hThread,True,Infinite);
    就是说只创建了6个,但hThread是15个元素的数组可以吧
      

  5.   

    好的我弄好了,这个问题弄了两天了都没有解决,现在弄好了,以前我不是这样处理是自己写东西辨别,结果显示还是有混乱情况发生,现在用waitforMultipleObjects,这样弄没有问题了.
    以前没有用过多线程编程,确实要集中看看