多线程中的线程等待执行

来源:互联网 发布:张店淘宝客服招聘 编辑:程序博客网 时间:2024/05/01 17:07

多线程中的线程等待执行

 

 邵盛松 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个线程,探索当中.