应该很简单,但搞了半天,也找了半天.没搞定,所以很郁闷,大家能否帮忙看一下.   如下:
       一个控制台程序,向导生成,使用MFC,设置全部是默认.
       声明线程函数  UINT proc(LPVOID param);
       在主程序添加代码部分加入三行       
       CWinThread *pThread;
       pThread = AfxBeginThread(proc, NULL);
       WaitForSingleObject(pThread, INFINITE);       主程序里接下来当然就是return了.   线程函数如下:
       UINT proc(LPVOID param)
      {
cout<<"..........................."<<endl;
cout<<"..........................."<<endl;
for(int i=0; i<3; i++){
cout<<"Output char "<<i<<endl;
}
cout<<"Thread "<<"over!"<<endl;
return 0;
       }
    运行程序,输出明显不正常,只有一开始的一行"."
    如果将WaitForSingleObject(pThread, INFINITE)改为Sleep(1000)
    则正常输出,但显然这种方式不是太实用,我是希望不论子线程运行的时间是多少秒,只有能子线程运行退出后,主线和方可退出.而不要人为地去延时.    而实际上我是要有多个子线程,现在的想法是在循环中创建这些子线程,然后将线程指针返回给一个数组,然后WaitForMultipleObjects(3(三个子线程), threadArray, false, INFINITE);
    然后写了一个demo也不正常,子线程还是能被正常创建,但总是会随主线程退出而中止.也就是一样的感觉,就是主线程刹不住车的感觉。  现在我就是不明白怎么要主线程刹住车,等子线程执行完之后再退出。
  请各位指点一下,这个问题在单子线程和多子线程是如何实现的?我的代码问题在哪里?

解决方案 »

  1.   

    WaitForSingleObject(pThread->m_hThread, INFINITE);
      

  2.   

    多谢楼上两位,我已看过完全可以.
    另外就是对多个子线程,我是定义一个
           HANDLE hWait[3]
    然后这样(在之前代码基础上)       for(int i=0; i<3; i++){
              pThread = AfxBeginThread(proc, NULL);
              hWait[i] = pThread->m_hThread;
           }       WaitForMultipleObjects(3 ,hWait, true ,INFINITE);
      
       
    等待所有子线程退出后返回.
    好像可以达到效果,但我不知道这是不是相对规范的用法???
    答完这个就可以结这个贴子了:)
      

  3.   

    WaitForMultipleObjects等待多个,可以