多线程下载问题(IDHTTP)
小弟写了一个多线程下载的程序,总是有死循环的迹象,不过我认为可能是产生了死锁。可是当单步跟踪的时候产生错误大家帮小弟看看啊:
unit IndyMThread;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
type
TForm1 = class(TForm)
BtnDowload: TButton;
BtnCancel: TButton;
EdtURL: TEdit;
Label1: TLabel;
REdtMess: TRichEdit;
IdHTTP1: TIdHTTP;
procedure BtnDowloadClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TThreadLoad = class(TThread)
private
{private declatation}
m_sURL:string;
protected
{protected declaration}
procedure GetFile(var sFileName:string);
procedure REditAdd;
procedure Execute;override;
public
{Public declarations }
REdt:TRichEdit;
Constructor Create(bWait:Boolean;const URL:string);
// Destructor Destroy;override;
end;
var
Form1: TForm1;
m_ArrayImage: Array[0..4]of string;
g_i:integer;
CriticalSec:TRTLCriticalSection;
implementation
{$R *.dfm}
procedure TThreadLoad.GetFile(var sFileName:string);
var
i:integer;
begin
for i:=0 to 4 do
begin
if m_arrayimage[i]='' then continue;
sFileName:=m_arrayimage[i];
m_arrayimage[i]:='';
exit;
end;
end;
procedure TThreadLoad.REditAdd;
begin
REdt.Lines.Append('正在保存');
end;
procedure TThreadLoad.Execute;
var
IDHttp2:TIDHttp;
file_name:string;
Streamfile1:TMemoryStream;
begin
while not terminated do
begin
EnterCriticalSection(CriticalSec);//进入临界段
try
GetFile(File_name);
IDHttp2:=TIDHttp.Create(nil);
try
StreamFile1:=TMemoryStream.Create;
try
IDHttp2.Head(m_sURL);
IDHttp2.Get(m_sURL,StreamFile1);
StreamFile1.SaveToFile('d:\'+file_name);
finally
StreamFile1.Free;
end;
finally
idhttp2.Free;
end;
// synchronize(REditAdd);
finally
LeaveCriticalSection(CriticalSec);
end;
if file_name='' then exit;
end;//begin
end;
procedure TForm1.BtnDowloadClick(Sender: TObject);
var
i,k:integer;
ThreadArray:array[0..4]of TThreadLoad;
begin
for i:=0 to 4 do
begin
ThreadArray[i]:=tthreadLoad.Create(true,EdtURL.Text+'/'+m_arrayimage[i]);
ThreadArray[i].REdt:=REdtMess;
end;
for k:=0 to 4 do ThreadArray[k].Resume;
end;
Constructor TThreadLoad.Create(bWait:boolean;const URL:string);
begin
inherited create(bWait);
m_sURL:=URL;
end;
{Destructor TThreadLoad.Destroy;
begin
inherited Destroy;
end; }
procedure TForm1.FormCreate(Sender: TObject);
begin
m_ArrayImage[0]:='aa.bmp';
m_arrayImage[4]:='4.jpg';
m_arrayimage[2]:='1.jpg';
m_arrayimage[3]:='2.jpg';
m_arrayimage[1]:='3.jpg';
g_i:=0;
InitializeCriticalSection(CriticalSec)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(CriticalSec);
end;
end.
{==============================================================}
delphi的单步跟踪的时候产生错误错误提示,有的时候会整个delphi都死
掉
{==============================================================}
继续阅读《多线程下载问题(IDHTTP)》的全文内容...
多线程下载问题(IDHTTP)相关推荐
- libcurl使用多线程下载大文件源码示例!
使用libcurl多线程下载大文件的基本思想: 首选打开文件,将文件等分为指定的片段,使用http range下载,一个线程下载一个片段,当线程下载片段时,它们将数据写到打开文件的指定位置,类似BT文 ...
- [Mac] mac linux 多线程下载利器 axel
> 之前做过一些文件下载的统计,发现谷歌浏览器chrome和火狐firefox, 一般都是单线程的下载文件,360浏览器却是多线程的下载. 如今切换到了mac上,发现没有360哪个浏览器,就像 ...
- 基于流式的md5计算-多线程下载工具Lwget介绍
在数据传输的时候,我们希望实现以下目标: 1. 使用多线程传输,加速下载速度 2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件 3. 支持断点续传 4. 支持http协议和ft ...
- 断点续传---多线程下载进阶(一)
打算总结7篇笔记.来学习下断点续传---多线程下载进阶 AndroidManifest.xml <?xml version="1.0" encoding="utf- ...
- Android -- 多线程下载
因为Android应用程序是java写的,基本上很多java写的程序都可以直接照搬到Android上面,移植性非常Good.这里讲一下多线程下载,就是每个线程都下载自己的那部分,那么就需要平均分配分割 ...
- Android 多线程下载 显示进度 速度
功能要求:从网络下载一APK应用,显示下载速度.进度,并安装应用. 运行效果图: 工程结构图: 很简单,就一个activity,一个更新UI的线程,一个下载线程加个文件处理类 主要代码: /***多线 ...
- android 多线程下载,断点续传,线程池
android 多线程下载,断点续传,线程池 你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效 ...
- python代码示例下载-Python实现多线程下载脚本的示例代码
0x01 分析 一个简单的多线程下载资源的Python脚本,主要实现部分包含两个类: Download类:包含download()和get_complete_rate()两种方法.download() ...
- Android 模拟多线程下载
以下是一个多线程下载的例子,见代码: 1.首先是布局文件 1 <?xml version="1.0" encoding="utf-8"?> 2 &l ...
最新文章
- Leetcode-笔记-22.括号生成--递归
- pytorch 学习: STGCN
- QT的QQmlScriptString类的使用
- WEB数据透视表Pivot Table
- 计算机二级web题目(3)--HTML基础
- 20个正则表达式,举一反三,相信对你很有用
- 简单阻容降压电路图_升压降压芯片电路
- 用计算机画 信息技术课标要求,[引用]小学信息技术课程标准
- SQL笔记(1)索引/触发器
- cookie、session和token
- [CMake] set_property 和 set_target_properties
- 苹果6换屏多钱_iPhone12Pro更换屏幕多少钱 苹果12官方换屏价格公布
- DataGrid中間隔色的實現
- at shutdown 不起作用_at胎是什么胎
- 抖音快手微视去水印小程序!全网短视频无水印免费下载工具!
- 刚入职就写了个bug,把几万用户搞蓝屏了···
- word文档图标变成白纸_win10word文档图标变白,win10office图标空白
- React 还是 Vue: 你应该选择哪一个Web前端框架?
- MacBook无故黑屏,按键没反应解决办法
- 安装GD库 GD库安装全过程详解