请问我在一个按钮的事件中,想调用两个线程,怎么控制前面的一个线程执行完了才执行下一个线程?

qdcnc168 2003-10-16 08:06:39
AfxBeginThread(threadproc1,hWnd);
AfxBeginThread(threadproc2,hWnd);
我想在threadproc1执行完了之后才执行threadproc2,请问怎么控制?
谢谢帮助!!!!
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qdcnc168 2003-10-17
  • 打赏
  • 举报
回复

好像是不行!

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

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就是一直等到它结束
qdcnc168 2003-10-16
  • 打赏
  • 举报
回复
HWND hWnd=GetSafeHwnd();
AfxBeginThread(threadproc1,hWnd);
我原来是这样调用线程的,那么是不是这样调用:
CYourDlg::OnButton1()
{
pFirstThread = AfxBeginThread(........);
WaitForSingleObject(pFirstThread->m_hThread,hWnd);//等待第一个线程函数的返回
pSecondThread = AfxBeginThread(threadproc2,hWnd);
WaitForSingleObject(pSecondThread->m_hThread,hWnd);
谢谢帮助!

}
vcforever 2003-10-16
  • 打赏
  • 举报
回复
首先定义两个指针,用于存放AfxBeginThread() 返回的指针
CWinThread *pFirstThread;
CWinThread *pSecondThread;
你可以在你的按钮中这样写
CYourDlg::OnButton1()
{
pFirstThread = AfxBeginThread(........);
WaitForSingleObject(pFirstThread->m_hThread,....);//等待第一个线程函数的返回
pSecondThread = AfxBeginThread(threadproc2,....);
WaitForSingleObject(pSecondThread->m_hThread,....);

}
这样就可以让两个线程依次运行了!

希望对你有所帮助!
akiko 2003-10-16
  • 打赏
  • 举报
回复
WaitForSingleObject(hThread1,INFINITE);
smch 2003-10-16
  • 打赏
  • 举报
回复
全局变量。判断。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧