Rechalow 2022-09-12 14:11 采纳率: 60%
浏览 6
已结题

Delphi无法进行多线程下载。

问题遇到的现象和发生背景

我尝试在Delphi里面使用多线程制作下载工具。

过程:
1.首先获取网络上的文件大小【已成功】
2.然后再将网络文件按照(用户)设置的最大线程进行分段【已成功】
3.用TIdHttp的一个下载Range对文件进行下载【已成功】
4.在多线程里面,调用Range文件下载,进行筛选,将其命名【文件名-线程执行数.tmp】并挨个存放至%用户Temp%/文件夹/下、【就这一步未完成】
5.将下载下来的所有tmp进行合并,最终将合并后的流SaveToPath到(用户)指定目录下。【已完成】
6.所有线程退出,回归窗口。【这个等到第4步完成之后再做】
目的:完成上述步骤并成功将文件下载下来。

问题相关代码,请勿粘贴截图

https://paste.ubuntu.com/p/PmvVWZvzhG/
这里已经是我的所有能用的代码了,请各位好好看看吧。如果还需要任何别的代码,我会将其粘贴的。

运行结果及报错内容

运行结果:在进行TThread.Sleep之后,依旧会出现文件复写的问题。简单来说,就是有些tmp文件被跳过了。例如从1直接到4。经过查证是1下载完之后,4主动先执行完所有步骤,然后将4文件下载下来,然后2和3将会按照自增也会来到4线程,这就导致了4文件被下载了3次。而且是覆盖重写的4文件。

我的解答思路和尝试过的方法

尝试过将StringStream替换成FileString,但还是不行。

我想要达到的结果

成功进行多线程下载。使用TTask的

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月20日
    • 创建了问题 9月12日

    悬赏问题

    • ¥15 在不同的执行界面调用同一个页面
    • ¥20 基于51单片机的数字频率计
    • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
    • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
    • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
    • ¥15 C++map释放不掉
    • ¥15 Mabatis查询数据
    • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
    • ¥15 关于E22-400T22S的LORA模块的通信问题
    • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路