線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1374
推到 Plurk!
推到 Facebook!

在 TThread 中使用 IdHttp

答題得分者是:jackalan
x3304
一般會員


發表:3
回覆:4
積分:6
註冊:2003-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-26 14:27:50 IP:61.61.xxx.xxx 未訂閱
大家好,小弟向各位請教一下:    我想做出像 flashget 那樣可以用多個執行緒下載的程式,不需要斷點續傳, 只要能一次下載多個檔案就行了,我試著在 TThread 中使用 IdHttp 去下載, 但有個問題一直不知怎解,就是要如何得知每個下載工作的進度?    以下是部分的程式碼:    
 
TDt = class(TThread)
....
procedure TDt.Execute;
var
    IDDL:TidHttp;
    fs:TFileStream;
begin
    IDDL:=TIDHTTp.Create(form1);
    IDDL.ReadTimeout:=10000;
    fs := TFileStream.Create(aSaveDir aSaveName, fmCreate);        try
        if length(aProxy)>1 then
        begin
            IDDL.ProxyParams.ProxyServer:=aProxy;
            IDDL.ProxyParams.ProxyPort:=aPPort;
        end;            IDDL.Get(aURL,fs);
    except
            IDDL.Disconnect;
    end;
        fs.Free;
        IDDL.Free;
        self.Terminate;
end;     
一般我們都是在 OnWork 事件中的 AWorkCount 來取得進度, 可是在這種狀況,要如何得知這個 IDDL (TidHttp) 的 AWorkCount? 希望能夠做到在一個ListBox中, 第一行 => 顯示第一個下載的進度, 第二行 => 顯示第二個下載的進度, .....類推... 本來想說能不能指定一個 OnWork 事件給 IDDL IDDL.OnWork:=form1.IdHTTP1.OnWork; 可是想不出來要如何將結果顯示到指定的位置.... 請教各位大大,要怎麼做到這種效果呢? 謝謝
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-03 23:25:07 IP:221.226.xxx.xxx 未訂閱
你的程序不是多线程执行的吗? 在创建线程的时候传递一个参数给线程,标记出该线程是对应你LISTBOX中那个下载的。    另外你写多线程时TidHttp最好动态创建,不要使用例如form1.IdHTTP1这种,
定义线程变量:
TranCount : Integer;
MYIdHTTP1 : TidHttp;    自定义ONWORK:
procedure xxxx.MYIdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  TranCount := AWorkCountMax;
end;    procedure xxxx.MYIdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Form.ListBox1.Items[ThreadNum].text := InttoStr(Round(AWorkCount/TranCount*100)) '%';
end;    在线程开始时:
ThreadNum := NowItemIndex;{NowItemIndex是创建线程时传入的}
MYIdHTTP1 := TidHttp.Create(Application);
MYIdHTTP1.OnWork := MYIdHTTP1Work;
MyIdHTTP1.OnWorkBegin := MYIdHTTP1WorkBegin;
呵呵,借东西要还,所以别忘记在用完后FREE创建的MYIdHTTP1。 ======================= 无情剑客多情剑 發表人 - jackalan 於 2004/09/03 23:38:33
x3304
一般會員


發表:3
回覆:4
積分:6
註冊:2003-10-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-05 15:25:05 IP:61.61.xxx.xxx 未訂閱
感謝 jackalan大大 ,這樣應該就可以了。
系統時間:2024-07-06 21:39:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!