如何让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]);
...全文
264 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
深海鱼 2007-03-27
  • 打赏
  • 举报
回复
谢谢两位的帮忙,问题已解决。
chq_zml 2007-03-24
  • 打赏
  • 举报
回复
我的想法是:你的现在这个线程相当于控制这些线程的,

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

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

然后在主线程中等待这个线程结束就好了!
WingForce 2007-03-23
  • 打赏
  • 举报
回复
其实你要实现的这个东东可以用线程池代替
WingForce 2007-03-23
  • 打赏
  • 举报
回复
简单的改法就是启动一个新的线程来执行上面你想做的所有操作

而千万不能在用户界面的线程中搞WaitForMultipleObjects
深海鱼 2007-03-23
  • 打赏
  • 举报
回复
请问应该怎么修改呢?
WingForce 2007-03-23
  • 打赏
  • 举报
回复
//等待PER_NUMBER个线程执行完毕再继续执行
WaitForMultipleObjects(PER_NUMBER,hThreads,TRUE,5000);

这个不死掉就非常奇怪了。。。。
深海鱼 2007-03-23
  • 打赏
  • 举报
回复
不知道我这样写对不对,而且每当程序执行到WaitForMultipleObjects(PER_NUMBER,hThreads,TRUE,5000); 这句时,窗口就死掉了。请高人指教,谢谢!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧