Hi!
Ich lade in einem Thread eine Datei über IdHTTP.Post hoch.
Den Status (Geschwindigkeit, Fortschritt) lasse ich auf der Haupt-Form über Synchronize ausgeben.
Das Problem ist jetzt, dass OnWork genau 171mal aufgerufen wird und danach OnWorkEnd. Das alles geschieht in einem Zeitraum von ca. 1-2 Sekunden. Der Upload ist danach aber noch nicht fertig.
In der Zeit bis zum Upload-Ende wird kein OnWork mehr aufgerufen.
Hier der Code (die wichtigsten Stellen):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure TUploadThread.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); var t:double; begin t := (gettickcount-t1)/1000; if t <= 0 then t := 1; speed := round((AWorkCount/1024)/t); progress := round(AWorkCount/size*100); Synchronize(UpdateListItem); end;
procedure TUploadThread.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin Synchronize(SendWorkEnd); end;
procedure TUploadThread.Execute; ... begin idHTTP := TidHTTP.Create(Form1); IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'; IdHTTP.SendBufferSize := 1024*6; idHTTP.OnWork := IdHTTPWork; idHTTP.OnWorkEnd := IdHTTPWorkEnd; ... repeat ... t1 := gettickcount; IdHTTP.Post(UPLOAD_URL, PicData, mResponse); ... until false; end; |