void CPrintArcView::OnBtnfind()
{
//线程1
AfxBeginThread(&ThreadZq, (LPVOID)this, THREAD_PRIORITY_NORMAL);
//线程2
AfxBeginThread(&ThreadHn, (LPVOID)this, THREAD_PRIORITY_NORMAL); if(线程1结束 && 线程2结束)
{
执行其它任务
}
}请问如何实现?
{
//线程1
AfxBeginThread(&ThreadZq, (LPVOID)this, THREAD_PRIORITY_NORMAL);
//线程2
AfxBeginThread(&ThreadHn, (LPVOID)this, THREAD_PRIORITY_NORMAL); if(线程1结束 && 线程2结束)
{
执行其它任务
}
}请问如何实现?
2 WAITFORMULTIOBJECT 需要两个EVENT,不能一步执行,程序会挂在WAITFORMULTIOBJECT 函数处
{
//线程1
CWinThread t1 = AfxBeginThread(&ThreadZq, (LPVOID)this, THREAD_PRIORITY_NORMAL);
//线程2
CWinThread t2 = AfxBeginThread(&ThreadHn, (LPVOID)this, THREAD_PRIORITY_NORMAL); WaitForSingleObject(t1.m_hThread, INFINITE);
WaitForSingleObject(t2.m_hThread, INFINITE);
{
执行其它任务
}
}
WaitForSingleObject(t2.m_hThread, INFINITE);
{
执行其它任务
}
BOOL g_bThFinished1 = FALSE;
BOOL g_bThFinished2 = FALSE;WINAPI int ThreadZq()
{
... g_bThFinished1 = TRUE;
g_DoneOther();
return 0;
}WINAPI int ThreadHn()
{
... g_bThFinished2 = TRUE;
g_DoneOther();
return 0;
}g_DoneOther()
{
if (g_bThFinished1 && g_bThFinished2)
{
执行其它任务
}
}void CPrintArcView::OnBtnfind()
{
//线程1
AfxBeginThread(&ThreadZq, (LPVOID)this, THREAD_PRIORITY_NORMAL);
//线程2
AfxBeginThread(&ThreadHn, (LPVOID)this, THREAD_PRIORITY_NORMAL); /* 去掉,否则阻塞了主线程,停止UI响应
if(线程1结束 && 线程2结束)
{
执行其它任务
} */
}
被阻塞了的,看样子,只有才开一个线程啊.
void CPrintArcView::OnBtnfind()
{
//线程1
CWinThread t1 = AfxBeginThread(&ThreadZq,(LPVOID)this,THREAD_PRIORITY_NORMAL);
//线程2
CWinThread t2 = AfxBeginThread(&ThreadHn,(LPVOID)this, THREAD_PRIORITY_NORMAL);
WaitForSingleObject(t1.m_hThread, INFINITE);
WaitForSingleObject(t2.m_hThread, INFINITE);
DWORD dwExitCode = 0;
do
{
GetExitCodeThread(t1.Handle,&dwExitCode);
}while(dwExitCode != 0x0000FFFF) //你事先定义好的线程安全退出码
dwExitCode = 0;
do
{
GetExitCodeThread(t2.Handle,&dwExitCode);
}while(dwExitCode != 0x0000FFFF) //你事先定义好的线程安全退出码
{
执行其它任务
}
}
t1.SetEvent(t1.m_hExit);//通知t1线程进行结束操作
t2.SetEvent(t2.m_hExit);//通知t2线程进行结束操作