如何控制同时打开线程的数量? 如何控制线程的数量?假设一共有100个线程需要执行,但是每次只允许同时打开10个线程,当打开的线程执行完毕后自动执行下一个线程,直至所有线程都执行完毕。注:打开的线程并不是同一时间执行完毕的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程池模型,规定每次并发最大数为10,让线程池对象来控制并发数。有不少开源的线程池模型,可以去网上找找。boost也有引应的程序库,不过我没用过。 线程池思想。先CreateThread创建100个,线程函数里都用WaitForSingleObject阻塞在Event上100个线程的句柄都放在队列A里,10个线程以内的活动线程放在集合B里。外界每请求1个线程,就从队列A头部取1个,放入集合B,然后准备好线程数据,SetEvent解挂线程。当然,集合B里如果有10个线程了,满了,外界再请求的时候,就返回错误码,表示满了。线程完成工作之后,调用线程池的TaskComplete(HANDLE hThread)函数,由线程池把他从集合B里删除,放入队列A的队尾。线程函数是个类似这样的循环:while(ture){ WaitForSingleObject(); // Do work here. pThreadPool->TaskComplete(hCurrentThread);} 如何在非模对话框中DELETE掉NEW出来的变量 如何做一个服务? MSDN上介绍的new这个操作符的疑问 什么是代理、存根及类厂对它们不太理解。请大家讲讲。一般情况下,这三个东西是不是不需要啊? [版务帖]版主任免和版主招募 请问 difftime(t1,t2) 返回得值跟 t1-t2的结果有什么区别 学习钩取密码框密码(特别是QQ),高手提供点思路(不要把我往坏处想) 怎样得到某个程序所连接到的主机的IP和端口? 编译问题!! 请问用什么软件可以读扩展名为ps的文件, 哪里可以下载? SDI中如何使用CTabCtrl? 怎样读取LIST内容到文件呢
有不少开源的线程池模型,可以去网上找找。boost也有引应的程序库,不过我没用过。
先CreateThread创建100个,线程函数里都用WaitForSingleObject阻塞在Event上
100个线程的句柄都放在队列A里,10个线程以内的活动线程放在集合B里。
外界每请求1个线程,就从队列A头部取1个,放入集合B,然后准备好线程数据,SetEvent解挂线程。
当然,集合B里如果有10个线程了,满了,外界再请求的时候,就返回错误码,表示满了。
线程完成工作之后,调用线程池的TaskComplete(HANDLE hThread)函数,由线程池把他从集合B里删除,放入队列A的队尾。
线程函数是个类似这样的循环:
while(ture)
{
WaitForSingleObject();
// Do work here.
pThreadPool->TaskComplete(hCurrentThread);
}