AfxBeginThread(threadproc1,hWnd);
AfxBeginThread(threadproc2,hWnd);
我想在threadproc1执行完了之后才执行threadproc2,请问怎么控制?
谢谢帮助!!!!

解决方案 »

  1.   

    WaitForSingleObject(hThread1,INFINITE);
      

  2.   

    首先定义两个指针,用于存放AfxBeginThread() 返回的指针
    CWinThread *pFirstThread;
    CWinThread *pSecondThread;
    你可以在你的按钮中这样写
    CYourDlg::OnButton1()
    {
        pFirstThread = AfxBeginThread(........);
        WaitForSingleObject(pFirstThread->m_hThread,....);//等待第一个线程函数的返回
        pSecondThread = AfxBeginThread(threadproc2,....);
        WaitForSingleObject(pSecondThread->m_hThread,....);
        
    }
    这样就可以让两个线程依次运行了!希望对你有所帮助!
      

  3.   

    HWND hWnd=GetSafeHwnd();
    AfxBeginThread(threadproc1,hWnd);
    我原来是这样调用线程的,那么是不是这样调用:
    CYourDlg::OnButton1()
    {
        pFirstThread = AfxBeginThread(........);
        WaitForSingleObject(pFirstThread->m_hThread,hWnd);//等待第一个线程函数的返回
        pSecondThread = AfxBeginThread(threadproc2,hWnd);
        WaitForSingleObject(pSecondThread->m_hThread,hWnd);
    谢谢帮助!
        
    }
      

  4.   

    具体如下:pFirstThread = AfxBeginThread(........);
    WaitForSingleObject(pFirstThread->m_hThread,INFINITE);//等待第一个线程结束
    pSecondThread = AfxBeginThread(threadproc2,hWnd);DWORD WaitForSingleObject(
      HANDLE hHandle,        // handle to object to wait for
      DWORD dwMilliseconds   // time-out interval in milliseconds
    );
    第2个参数是毫秒值,写成INFINITE就是一直等到它结束 
      

  5.   


    好像是不行!我的第一个线程需要显示提示对话框,选了才能进行下去,如果按你的方法好像没有反映了,就是没有提示,是否在等待第一个线程的结束,可是这个线程又需要提示才能进行下去,这样形成死锁了,是不是这样?如果是,怎么解决?
    另外一种方式是用全局变量,也就是第二个线程运行了,但是等待第一个线程将定义的一个全局变量改成另外一个之,在等待的过程中应该用循环?
    如果用循环,那也要占cpu的,如果在循环的过程中用sleep怎么样?