如何让n个线程分组执行

深海鱼 深海鱼 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题陈述:我现在有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]);
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
深海鱼
进程/线程/DLL 15,466 成员 49,169 内容