多线程中的线程等待执行
邵盛松 2010-2-27
一、一个线程的等待
等待一个线程A执行完毕之后,执行线程B
同步对象为事件对象使用CEvent类
CEvent eventA;//全局变量
CWinThread *pA=AfxBeginThread(函数A);
pA->ResumeThread();
CWinThread *pB=AfxBeginThread(函数B);
pB->ResumeThread();
函数A
{
其他执行代码
eventA.SetEvent();
return 0;
}
函数B
{
WaitForSingleObject(eventA.m_hObject,INFINITE);
其他执行代码
return 0;
}
二 多个线程的等待
线程B等待线程A全部执行完毕之后才开始执行。
代码形式如下
HANDLE handle[64];//全局变量
for (int i=0;i <64;i++)
{
CWinThread *pA=AfxBeginThread(函数A);
handle[i]=pA->m_hThread;//存储线程句柄
pA->ResumeThread();
}
CWinThread *pB=AfxBeginThread(函数B);
pB->ResumeThread();
函数A
{
其他执行代码
return 0;
}
函数B
{
WaitForMultipleObjects(64, handle, TRUE, INFINITE);
其他执行代码
return 0;
}
WaitForMultipleObjects的第一个参数为DWORD nCount,最大值是MAXIMUM_WAIT_OBJECTS
宏定义MAXIMUM_WAIT_OBJECTS的值为64。
等待超过64个线程,探索当中.