Delphi线程池实现多线程FTP分段下载组件 by :renshouren mail:114032666@qq.com QQ:114032666 2019.10.05 使用的组件 1、TIdFTP Indy FTP客户端 2、TThreadsPool 线程池 工作原理及流程 调用本单元,将自动在程序初始化时生成线程池TThreadPoolDown实例 Share_ThreadPool_FTPDown 一、外部调用方法 外部只需要一次性调用 FtpDown() 函数向线程池加入下载任务,下载任务执行中的事件会通过调用时注册的 回调函数 AFtpDownEvent 进行通知。 二、内部工作流程 1、FtpDown()函数将调用TThreadPoolDown.AddFtpDown() ,然后调用TADownFileObj.MakeGetFileSizeObj()分配线程任务 本过程中,将向回调函数 AFtpDownEvent 触发 HEM_ADDURL 事件通知 2、工作线程调用任务对象TFTPHeadObj.DoThreadExecute 过程获取远程文件大小 备注:该功能实际使用到FTP命令SIZE,该命令一些老版本FTP服务器有可能不支持 本过程中,若获取文件大小成功,将向回调函数 AFtpDownEvent 触发 HEM_GETSIZE 事件通知, 若失败,则触发 HEM_ERROR 事件通知 3、得到远程文件大小后,调用TADownFileObj.MakeGetObjs(),分配获取远程文件线程任务 本过程中,开始时,将向回调函数 AFtpDownEvent 触发 HEM_WORKBEGIN 事件通知 在接收数据时,向回调函数 AFtpDownEvent 触发 HEM_WORK 事件通知 4、工作线程调用任务对象 TFTPGetObj.DoThreadExecute 实际下载远程文件数据块 每一个数据块下载任务完成后,触发 HEM_BLOCKOK 事件通知 5、所有数据块完成后,将调用 DoDownloadOK 函数,触发 HEM_DOWNOK 事件通知
2026-04-20 09:28:28 14KB Delphi FTP 线程池
1
ftp上传下载组件(控件)封装很好,带进度条,速度非常快。
2022-05-04 18:26:56 425KB c# cshartp ftp 上传
1
jspSmartUpload,一款组件。实现了文件的上传、下载。使用方法见:http://blog.sina.com.cn/s/blog_4cc16fc50100bwby.html
2021-12-17 21:56:22 136KB jspSmartUpload 文件上传 下载组件
1
JSP上传下载组件 包含源码及帮助文档,jspsmartupload
1
【版本已更新:http://download.csdn.net/source/1687395】 半成品,还有以下几部分未完成: 1、断点续传;(方法都在,代码没调好,就先注释掉了) (就是保存当前下载信息,下次重新读取,最简单的做法就是序列化,要用到的自己改改调调就成) 2、自定义下载窗体; (就像 MessageBox.Show() 一样,已经做了一个简单的Form) 3、部分细节没做好,可能存在BUG; (用着,遇到再说) 涉及的一些应用: 多线程 -- 没用线程池,因为不好控制状态; 事件驱动 -- 自我感觉不是很好,最好谁能改改; 另外,组件的封装也没仔细整理过~ 期待有人能做个完美的组件。 应用范围:文件下载、在线升级 (这个组件就是为了下载升级文件而做的……) 使用示例:(添加DLL引用) List DTaskList = new List(); foreach ( …… ) { DownloadMag.DTask dt = new DTask(); dt.Name = "任务名"; dt.FileName = "文件名"; dt.Size = 文件大小; dt.URL = "下载地址"; dt.CRC32 = CRC32校验值; dt.SaveMode = true; DTaskList.Add(dt); } new DownloadMag.DownloadForm(this).Show(DTaskList.ToArray(), "下载信息文件名"); 没时间修修改改,所以把这个半成品放出来了,也就当时抛砖引玉吧。 谁有兴趣有空闲就提提意见,找找Bug,最好是把它做完美了 :) 意见请提到:http://blog.csdn.net/0xff/archive/2007/11/01/1861780.aspx
1
【版本已更新:http://download.csdn.net/source/2632090】 (说明:这是一个输出DLL的项目,需要在其他项目添加引用使用,如果要直接运行,请自行添加入口函数) 支持多个下载任务,分块多线程下载,断点续传。 (对比上个版本,完成了遗留的功能,修改了事件触发过程及处理方式,重新整理了代码及注释) 内含两个窗体,可视为演示程序。 DownloadForm 下载窗体,含相关事件处理及交互控制 TestForm1 调用DownloadForm下载测试 Events.txt 描述事件触发及处理流程 希望写的能看懂: 一般实时的事件需要在当前子线程处理;而涉及到线程控制的事件(如结束下载线程),为了确保事件处理能正常执行,则才采用主线程代理的方式处理。 这种代理方式是由于系统中直接操作线程引发的,如果改用系统线程池的话,可以重新定制处理流程。
1