如何让n个线程分组执行
深海鱼 2007-03-23 12:27:10 问题陈述:我现在有n个(n的值是不固定的)线程,所以肯定不能通过循环一次把它们都起来,所以现在我想分组执行它们,比如分为10个一组,第一组执行完了,执行第二组,依次下去,直到执行完毕。
我的程序是这样写的:
//定义宏,组长度
#define PER_NUMBER 10
int TotalIPNum = n; //要执行的IP总数
int Counter = 0; //执行轮数计数器
int k=0; //循环计数
int RoundNum; //要执行的轮数
int threadNum;
HANDLE hThreads[PER_NUMBER];
HANDLE threadn; //非分组执行时的线程句柄
DWORD threadID = 0;
if (TotalIPNum <= PER_NUMBER)
//如果要执行的总数小于预定的分组执行线程值,则直接执行,否则分组执行
{
for (k = 0;k < TotalIPNum;k++)
{
threadn = CreateThread(NULL,0,MyWorkThread,p_ConnectInfo,0,&threadID);
}
}
else
{
RoundNum = TotalIPNum/PER_NUMBER; //总共要执行的轮数
if ((TotalIPNum % PER_NUMBER) != 0)
//如果IP总数不是PER_NUMBER的整数倍,则使RoundNum的值加1
{
RoundNum++;
}
//开始执行
for (Counter = 1;Counter <= RoundNum;Counter++)
{
if ((Counter * PER_NUMBER) > TotalIPNum)
//这种情况出现IP总数不是PER_NUMBER的整数倍的情况下
{
for (k = (Counter - 1)*PER_NUMBER;k < TotalIPNum;k++)
{
threadn = CreateThread(NULL,0,MyWorkThread,NULL,0,&threadID);
}
}
else
{
for(threadNum = 0;threadNum < PER_NUMBER; threadNum++){
hThreads[threadNum] = CreateThread(NULL,0,MyWorkThread,NULL,0,&threadID);
}
//等待PER_NUMBER个线程执行完毕再继续执行
WaitForMultipleObjects(PER_NUMBER,hThreads,TRUE,5000);
}
}
}
//关闭线程句柄数组
for (k = 0; k < PER_NUMBER; k++)
CloseHandle(hThreads[k]);