如何确保线程执行完后,再执行后面步骤???

hzhhy 2004-04-10 02:31:15
程序:
f()
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
f1();
}
在这个程序中,f1()不等m_pThread[i]执行完就先执行,为什么呀???
怎样才能使线程m_pThread[i]执行完后再执行后面步骤???
...全文
358 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
top_hipster 2004-04-11
  • 打赏
  • 举报
回复
for(i=0;i<2;i++)
{
m_pThread[i]=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
}
WaitForMultiObject(2,m_pThread,,TRUE,INFINITE);
f1();
可以等到两个线程都运行结束后,才执行f1();
babam 2004-04-11
  • 打赏
  • 举报
回复
你要等他执行完,为什么不顺序执行?要另开一个线程?
hai_feng 2004-04-11
  • 打赏
  • 举报
回复

f()
{for(i=0;i<2;i++)
//还要加一句
CEventThreadEnd.ResetEvent();

m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);

//加入这句
::WaitForSingleObject(CEventThreadEnd.m_hObject,INFINITE);

f1();
}

hai_feng 2004-04-11
  • 打赏
  • 举报
回复
用下面的代码试一下:


CEvent CEventThreadEnd;//定义全局变量

……

//你的线程主函数
UINT ThreadsProc(LPVOID pParam)
{
//具体操作
//……



//在线程要退出时插入这句:
CEventThreadEnd.SetEvent();
//线程正常退出
return 0;
}

……

f()
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);

//加入这句
::WaitForSingleObject(CEventThreadEnd.m_hObject,INFINITE);

f1();
}


yxlijinzhu 2004-04-10
  • 打赏
  • 举报
回复
你的这个问题典型的解决办法肯定是用信号量.

你可以让你的那两个线程在退出时使信号量有效就行了, 大体代码类似于楼上高手的代码, 只是你是一个线程等待两个线程的信号而已.
hzhhy 2004-04-10
  • 打赏
  • 举报
回复
唉,我这两个线程内都是调用com中的函数,
不会是这个不行吧!
用也不行!
hzhhy 2004-04-10
  • 打赏
  • 举报
回复
呜呜~~~~~~~~~~~~~
大哥,按您的方法做了,
仍然是f1();先执行!!!!!

我是想这两个线程同时执行,两个都执行完成再执行f1();
~~~~~
icr_mio 2004-04-10
  • 打赏
  • 举报
回复
ft!

------------------

f()
{
for(i=0;i<2;i++)
{
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
WaitForSingleObject(m_pThread, -1);
f1();
}
}
icr_mio 2004-04-10
  • 打赏
  • 举报
回复
f()
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
WaitForSingleObject(m_pThread, -1);
f1();
}

15,471

社区成员

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

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