请问我在一个按钮的事件中,想调用两个线程,怎么控制前面的一个线程执行完了才执行下一个线程? AfxBeginThread(threadproc1,hWnd);AfxBeginThread(threadproc2,hWnd);我想在threadproc1执行完了之后才执行threadproc2,请问怎么控制?谢谢帮助!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WaitForSingleObject(hThread1,INFINITE); 首先定义两个指针,用于存放AfxBeginThread() 返回的指针CWinThread *pFirstThread;CWinThread *pSecondThread;你可以在你的按钮中这样写CYourDlg::OnButton1(){ pFirstThread = AfxBeginThread(........); WaitForSingleObject(pFirstThread->m_hThread,....);//等待第一个线程函数的返回 pSecondThread = AfxBeginThread(threadproc2,....); WaitForSingleObject(pSecondThread->m_hThread,....); }这样就可以让两个线程依次运行了!希望对你有所帮助! HWND hWnd=GetSafeHwnd(); AfxBeginThread(threadproc1,hWnd);我原来是这样调用线程的,那么是不是这样调用:CYourDlg::OnButton1(){ pFirstThread = AfxBeginThread(........); WaitForSingleObject(pFirstThread->m_hThread,hWnd);//等待第一个线程函数的返回 pSecondThread = AfxBeginThread(threadproc2,hWnd); WaitForSingleObject(pSecondThread->m_hThread,hWnd);谢谢帮助! } 具体如下: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就是一直等到它结束 好像是不行!我的第一个线程需要显示提示对话框,选了才能进行下去,如果按你的方法好像没有反映了,就是没有提示,是否在等待第一个线程的结束,可是这个线程又需要提示才能进行下去,这样形成死锁了,是不是这样?如果是,怎么解决?另外一种方式是用全局变量,也就是第二个线程运行了,但是等待第一个线程将定义的一个全局变量改成另外一个之,在等待的过程中应该用循环?如果用循环,那也要占cpu的,如果在循环的过程中用sleep怎么样? VC9.0中怎么实现定时器? 如何在view中显示CToolTipCtrol的工具提示,不只是在工具栏上显示 请教关于VC++ 6.0 中图片处理问题 如何得到文件夹大小? 好像不能下载帖子了 存储过程的一个古怪的问题 紧急请教各位高手(VC++、DAO、Access): VC 里关于Thread重复定义的 编译错误 Vista可以装VC++6.0 吗? 有在这个函数HWND CDataExchange::PrepareCtrl中出错的吗?? 奇怪的问题classwizard中怎么加不了WM_NCHITTEST消息 请教MapViewOfFile函数的问题
CWinThread *pFirstThread;
CWinThread *pSecondThread;
你可以在你的按钮中这样写
CYourDlg::OnButton1()
{
pFirstThread = AfxBeginThread(........);
WaitForSingleObject(pFirstThread->m_hThread,....);//等待第一个线程函数的返回
pSecondThread = AfxBeginThread(threadproc2,....);
WaitForSingleObject(pSecondThread->m_hThread,....);
}
这样就可以让两个线程依次运行了!希望对你有所帮助!
AfxBeginThread(threadproc1,hWnd);
我原来是这样调用线程的,那么是不是这样调用:
CYourDlg::OnButton1()
{
pFirstThread = AfxBeginThread(........);
WaitForSingleObject(pFirstThread->m_hThread,hWnd);//等待第一个线程函数的返回
pSecondThread = AfxBeginThread(threadproc2,hWnd);
WaitForSingleObject(pSecondThread->m_hThread,hWnd);
谢谢帮助!
}
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就是一直等到它结束
好像是不行!我的第一个线程需要显示提示对话框,选了才能进行下去,如果按你的方法好像没有反映了,就是没有提示,是否在等待第一个线程的结束,可是这个线程又需要提示才能进行下去,这样形成死锁了,是不是这样?如果是,怎么解决?
另外一种方式是用全局变量,也就是第二个线程运行了,但是等待第一个线程将定义的一个全局变量改成另外一个之,在等待的过程中应该用循环?
如果用循环,那也要占cpu的,如果在循环的过程中用sleep怎么样?