发新话题
打印

怎样取得多线程中动态创建的IDHTTP的下载量

怎样取得多线程中动态创建的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;
妖城欢迎您!

TOP

发新话题