如何让n个线程分组执行
问题陈述:我现在有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]);
我的程序是这样写的:
//定义宏,组长度
#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]);
...全文
相关推荐
C#多线程系列教程PDF文件
和"{n}"、"{n,}"、"{n,m}"可以控制字符的重复次数。
lucene分组查询优化facet
**并行处理**:利用多线程并行计算不同分面,可以加速分组查询。但需要注意线程安全和资源管理。
详解MySQL分组排序求Top N
在分组排序求Top N的问题中,我们不仅要对数据进行分组,还要在每个分组内找到排名最高的N个记录。这里的N是一个预定义的数字,例如在示例中是3。这个过程通常涉及到子查询和窗口函数的使用。
mysql使用GROUP BY分组实现取前N条记录的方法
然而,有时我们需要在分组后获取每个分组的前N条记录,这在处理统计分析或排名问题时非常常见。以下将详细讨论三种在MySQL中使用GROUP BY分组获取前N条记录的方法。
python 实现两个线程交替执行
线程交替执行,即让两个线程按照特定顺序交替进行,是线程同步的一种表现,它通常用于确保线程间操作的有序性和避免竞态条件。在本示例中,我们将探讨如何在Python中实现两个线程的交替执行。


进程/线程/DLL
