首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么让n个线程分组执行

2012-02-21 
如何让n个线程分组执行问题陈述:我现在有n个(n的值是不固定的)线程,所以肯定不能通过循环一次把它们都起来

如何让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]);

[解决办法]
其实你要实现的这个东东可以用线程池代替
[解决办法]
我的想法是:你的现在这个线程相当于控制这些线程的,

所以你要重新启动一个新的线程来开启这些你想要执行的线程

然后在新的线程中用WaitForMultipleObjects来等待所有的线程结束后,在返回

然后在主线程中等待这个线程结束就好了!

热点排行