如何实现让N个线程处理NNN条数据? 5000个图片编号1-5000,用50个线程去下载编号为1-50的图片,下载完后用这50个线程继续下载编号为51-100的图片…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多线程完成多个任务 5000个图片编号1....5000,用一个变量控制,每个线程下一个图片相应的变量加1,做好互斥,应该就可以了 这个线程间没有通信,还好吧。50个图片下完了后再开始下50个 可以自己划分任务。建立50个容器,每个容器分配一个线程,每个容器内就是所需要下载的图片。 1.在任何程序都不要做大于10以上的线程的操作。(浪费系统切换时间)2.对于多任务作业(你的图片)建立个任务队列 (注意内存泄漏)3.线程自动切换读取队列中数据完成任务就可以。 具体代码不能给你了 。不过估计你自己写还是费劲 找个会的人帮你吧。 分文件.如50个线程 每个线程分别下载100个. 你首先要考虑的问题是线程的切换问题。大量的线程切换性能不会很高。尽量避免过多的创建线程,而采用线程池 解决方法有很多,如果采用线程池的思想就是:一开始就创建50个线程,所有线程从一个队列中获取下载任务,如果队列为空,没有任务,就等待一个事件对象,挂起。当主线程向ListCtrl添加一个URL时,也向队列中添加这个URL,然后激活事件。事件已激活,就有一个线程被释放,该线程从队列中取得URL进行下载,下载完后检查队列是否为空,还有没有任务,有的话取出URL来再下载,没有的话等待事件对象,挂起。要注意的是多个线程访问队列这里,还需要一个临界锁或互斥量来同步一下。如果已经有5000个URL了,再创建线程进行下载的话就更简单了,比如5000个URL放在一个数组a里,用一个全局变量g记录当前下载到第几个了,创建50个线程,每个线程下载前取一个URL,CString strUrl = a[g];然后g++;然后进行下载,下载完了再取一个URL,直到g==5000; 访问a和g的时候做好线程同步就行了。方法还有很多,思路还有很多,不仅限于这几种 笔试题2 如何用MFC做漂亮点的菜单? 怎样让匿名用户可以创建我的COM组件?? 用ATL写的 郁闷啊!大家来帮忙! 请问在阻塞模式下使用sendto会不会阻塞,在什么情况下阻塞和如何避免? 2000下的console程序如何避免鼠标单击暂停 如何快捷的查找一个目录下是否存在以某字符串打头的文件 定时器出什么问题了? 在一个DLL中,要做一个和时间相关的触发器 谁能给我讲讲句柄这个东西阿?介绍书也行,多多给分阿!!! ACE中Proactor服务器主动断开,无法释放连接,求助啊! 求教:VC操作EXCLE插入图片后, 进程不退出
2.对于多任务作业(你的图片)建立个任务队列 (注意内存泄漏)
3.线程自动切换读取队列中数据完成任务就可以。
具体代码不能给你了 。不过估计你自己写还是费劲 找个会的人帮你吧。
一开始就创建50个线程,所有线程从一个队列中获取下载任务,如果队列为空,没有任务,就等待一个事件对象,挂起。当主线程向ListCtrl添加一个URL时,也向队列中添加这个URL,然后激活事件。事件已激活,就有一个线程被释放,该线程从队列中取得URL进行下载,下载完后检查队列是否为空,还有没有任务,有的话取出URL来再下载,没有的话等待事件对象,挂起。要注意的是多个线程访问队列这里,还需要一个临界锁或互斥量来同步一下。如果已经有5000个URL了,再创建线程进行下载的话就更简单了,比如5000个URL放在一个数组a里,用一个全局变量g记录当前下载到第几个了,创建50个线程,每个线程下载前取一个URL,CString strUrl = a[g];然后g++;
然后进行下载,下载完了再取一个URL,直到g==5000; 访问a和g的时候做好线程同步就行了。方法还有很多,思路还有很多,不仅限于这几种