如何实现主线程中创建子线程立即挂起,等待子线程完成操作之后,主线程才被唤醒,继续运行下去?????

解决方案 »

  1.   


    主线程中
    HANDLE hEvent = CreateEvent(...);//创建子线程
    CreateThread(..., hEvent,....);//hEvent传递给子线程,在子线程执行的最后,设置为有信号状态
    waitForSingleObject(hEvent, INFINITE);
      

  2.   

    主程序中:
    CEvent m_end;
    m_end.ResetEvent();
    AfxBeginThread();
    waitForSingleObject(hEvent, INFINITE);在线程函数结束时:m_end.SetEvent();
      

  3.   

    基本观点同1、2楼的。
    如果主线程是UI线程,建议在主线程中使用MsgWaitForMultipleObjects来等待,这样不会使主线程界面假死。
      

  4.   

    1.建立一个Event
    HANDLE m_hEvent=CreateEvent(NULL,TRUE,FALSE,"自己取个Event的名称");
    2.设置为无信号状态
    ResetEvent(m_hEvent);3.在主线程里加上下面得话:
    HANDLE hDeleteEvent=OpenEvent(EVENT_ALL_ACCESS,NULL,"自己取的Event的名");
    if(WaitForSingleObject(m_hDeleteEvent,INFINITE)==WAIT_OBJECT_0)//有信号才执行下面的操作
    {
       等待子线程完成操作之后,主线程才被唤醒,继续执行的操作
    }4.在子线程里加上下面的话:
    if("子线程完成操作之后")
    {
        SetEvent(m_hEvent);//讲Event设置为有信号状态
    }
      

  5.   

    可以混用,如果你需要的话。
    可以用WaitForMultiObject同步多个
      

  6.   

    CWinThread *pThread;
    pThread = AfxBeginThread(ThreadProc, pParam, suspend, 0, 0, CREATE_SUSPENDED); 
    waitForSingleObject(pThread->m_hThread, INFINITE); 
      

  7.   

    HANDLE h = CreateThread(...)
    waitForSingleObject(h, INFINITE); 
    就可以了,线程内核对像里有一个成员Signaed,线程结束,才受信.
      

  8.   

    也在学习中,
    不过有点抗拒MFC!