关于多线程多任务的请教!
来源:互联网 发布:js点击按钮删除当前行 编辑:程序博客网 时间:2024/06/11 08:36
关于多线程多任务的请教!
作 者: coldsea_2000 (张海)
等 级:
信 誉 值: 100
所属论坛: VC/MFC 进程/线程/DLL
问题点数: 100
回复次数: 7
发表时间: 2002-05-23 14:57:15Z
各位大哥:
小弟今日想做一个类似于网络蚂蚁一样的下载软件.我实现了多线程,但是多任务却不知道该如何实现?我想是不是按照任务的次序,把这些任务循环执行呢?还是要为任务本身的执行创建线程---也就是线程里面套线程?如果是线程里面套线程,那我该如何去做并且对多线程做好管理呢?谢谢各位不吝指教!
回复人: kevin_qing() ( ) 信誉:103 2002-05-23 15:12:40Z 得分:100
可以这样:
每增加一个任务时, 界面线程生成一个任务管理线程。
任务管理线程负责生成/管理下载线程,以及和界面的交互。
另外如果为了更高的效率的话,可以对任务管理和下载线程分别做一个线程池,以减少系统开销
Top
回复人: kevin_qing() ( ) 信誉:103 2002-05-23 15:14:44Z 得分:0
还可以在每个任务的下载线程中设置一个为主下载线程,它负责管理该任务的其他下载线程,flashget应该就是这么做的
Top
回复人: coldsea_2000(张海) ( ) 信誉:100 2002-05-28 01:24:58Z 得分:0
To kevin_qing(大哥/大姐):
小弟在每个任务中下载线程后,追加了一个其他的非下载线程,专门管理下载线程! 我把这个下载函数封装在一个类中,比如说:就是在CDownload中,CDownload中有个可供其他类调用的函数StartTask(CString URL),URL为资源地址;我原先以为在其他类中调用这个函数时,只要创建一个该类的局部变量,就可以实现多任务;但是事实上却不行!而全局的变量才可以,例如:CDownload dw;(dw为全局变量) dw.StartTask(string);这样才可以下载!
后来看了你的提示,我觉得如果为每个任务生成界面线程,但是怎么才能让这些界面看不见?我是用一个中间的dialog管理每个任务的!但是只能一个一个的进行下载;dialog聚焦时,点击其他的东西没用!如果用界面多线程,如何让dialog看不见?
而任务结束的时候自动销毁?谢谢!
小弟敬上!
Top
回复人: Kevin_qing() ( ) 信誉:103 2002-06-01 11:40:55Z 得分:0
你大概没明白我的意思:)
我说的界面线程其实就是你的主窗口/dialog的消息循环。
假如你对每个任务都封装在一个对象里面,比如:
class CTask{
char URL[1024];
//....
}
DWORD WINAPI TaskThread(CDownload* task)
{
HANDLE hThreads[32];
for(int i=0;i<nThreadMax;i++)//nThreadMax是最大分块数
hThreads[i]=_beginthreadex(DownloadThread,task,....);
WaitForMultipleObjects(nThreadMax,hThreads,true,INFINITE);//等待任务结束
for(i=0;i<nThreadMax;i++)
{
GetExitCodeThread(hThreads[i]);//处理任务返回值
closehandle(hThreads[i]);
}
PostMessage(hWnd,...);//发送消息到主界面
}
DWORD WINAPI DownloadThread(CDownload* task)
{
..........
};
当主界面收到一个下载消息时,开始一个TaskThread线程。
下载结束时,下载线程会发送消息通知主界面
Top
回复人: Kevin_qing() ( ) 信誉:103 2002-06-01 11:47:01Z 得分:0
其实这个可以只用单下载线程实现多连接的管理,不过程序很难写了
Top
回复人: coldsea_2000(张海) ( ) 信誉:100 2002-06-06 15:22:49Z 得分:0
我生成了一个基于winthread的线程,按照界面线程生成的方法,实现了多任务的下载,谢谢 Kevin_qing()的提示!非常的感谢!
小弟敬上!
Top
回复人: lgx1916(浅叶绿子) ( ) 信誉:98 2002-06-06 17:54:30Z 得分:0
flag
- 关于多线程多任务的请教!
- 小女初乍到,请多请教关于多线程的问题
- 关于多任务和多线程
- 请教个关于windows计划任务的问题?请高手赐教
- 请教关于mysql的优化
- 请教关于mysql的优化
- 请教关于数字滤波器的问题
- 请教关于pack的使用方法
- 请教关于VS2005的问题
- 请教关于JBossMQ的代码结构(摘自多篇文章)
- 一个关于多线程池任务配合的项目的总结
- 请教@!@关于最大化的按钮的编程。
- 请教大家一上问.关于定义冲突的!
- 请教关于global.asa的问题
- 请教一个关于弹出对话框的问题.
- 请教一个关于显示窗口的问题
- 请教关于视频播放的问题
- 请教高手一个关于msdn的问题
- 常用几种连接语句
- 范畴论入门文章
- 多线程之间的调剂问题
- 又是一天过去了!
- 想再去过过田园生活
- 关于多线程多任务的请教!
- 主 题: 请问:FlashGet的下载时的进度是怎么做的,就是那园球
- 帮同学调JSP
- vim for Windows
- 走向J2EE,漫长的道路
- 实体Bean 实例学习
- Visual Studio:针对 Java 开发人员的 C# 编程语言
- HSQLDB 1.7.2 --Lightweight 100% Java SQL Database Engine
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! JSP/Servlet 实现!