怎样取得多线程中动态创建的IDHTTP的下载量
問:
要在TidHTTP下载的过程中取得它的工作进度(即已经下载了多少字节),我知道是用它的onWORK事件去取得:procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer),
但是由于是动态创建的,所以我找不到合适的方法,怎么才能把每个线程中的TidHTTP的onWORK事件中的AworkCount值取出来
答:
Procedure TForm1.Button1Click(Sender: TObject);
Var
i: Integer;
Fs: Array[1..5] Of TFileStream;
Begin
For i:=1 To 5 Do Begin
Fs[i]:=TFileStream.Create(’c:\’+IntToStr(i)+’.htm’, fmCreate);
With TIdHTTP.Create(Nil) Do Begin
OnWorkBegin:=IdHTTP1WorkBegin;
OnWork:=IdHTTP1Work;
OnWorkEnd:=IdHTTP1WorkEnd;
Name:=’http’+IntToStr(i);
Get(’[url]http://www.21cn.com/[/url]’, Fs[i]);
Free;
End;
Fs[i].Free;
End;
End;
Procedure TForm1.IdHTTP1WorkBegin(Sender: TObject;AWorkMode: TWorkMode;
Const AWorkCountMax: Integer);
Begin
(Sender As TIdHTTP).Tag:=AWorkCountMax;
End;
Procedure TForm1.IdHTTP1Work(Sender: TObject;AWorkMode: TWorkMode;
Const AWorkCount: Integer);
Begin
With (Sender As TIdHTTP) Do Begin
If Name=’http1’ Then
Label1.Caption:=’线程1:’+IntToStr(AWorkCount Div 1024)+’K/’+IntToStr(Tag Div
1024)+’K’;
If Name=’http2’ Then
Label2.Caption:=’线程2:’+IntToStr(AWorkCount Div 1024)+’K/’+IntToStr(Tag Div
1024)+’K’;
If Name=’http3’ Then
Label3.Caption:=’线程3:’+IntToStr(AWorkCount Div 1024)+’K/’+IntToStr(Tag Div
1024)+’K’;
If Name=’http4’ Then
Label4.Caption:=’线程4:’+IntToStr(AWorkCount Div 1024)+’K/’+IntToStr(Tag Div
1024)+’K’;
If Name=’http5’ Then
Label5.Caption:=’线程5:’+IntToStr(AWorkCount Div 1024)+’K/’+IntToStr(Tag Div
1024)+’K’;
End;
End;
Procedure TForm1.IdHTTP1WorkEnd(Sender: TObject;AWorkMode: TWorkMode);
Begin
//
End;