程序:
f()
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
f1();
}
在这个程序中,f1()不等m_pThread[i]执行完就先执行,为什么呀???
怎样才能使线程m_pThread[i]执行完后再执行后面步骤???
f()
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
f1();
}
在这个程序中,f1()不等m_pThread[i]执行完就先执行,为什么呀???
怎样才能使线程m_pThread[i]执行完后再执行后面步骤???
{for(i=0;i<2;i++)
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
WaitForSingleObject(m_pThread, -1);
f1();
}
{
for(i=0;i<2;i++)
{
m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
WaitForSingleObject(m_pThread, -1);
f1();
}
}
不会是这个不行吧!
用也不行!
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();
}
f()
{for(i=0;i<2;i++)
//还要加一句
CEventThreadEnd.ResetEvent(); m_pThread=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]); //加入这句
::WaitForSingleObject(CEventThreadEnd.m_hObject,INFINITE); f1();
}
{
m_pThread[i]=AfxBeginThread(&ThreadsProc,(LPvoid)p[i],ThreadPriority[i]);
}
WaitForMultiObject(2,m_pThread,,TRUE,INFINITE);
f1();
可以等到两个线程都运行结束后,才执行f1();