何千ものファイルをダウンロードする長いループを実行しています。何時間もかかる可能性があるため、推定残り時間を表示したいと思います。ただし、私が書いたものでは、平均ミリ秒数が得られます。この平均ダウンロード時間をミリ秒から に変換するにはどうすればよいTDateTime
ですか?
私が設定している場所を見てくださいLabel1.Caption
:
procedure DoWork;
const
AVG_BASE = 20; //recent files to record for average, could be tweaked
var
Avg: TStringList; //for calculating average
X, Y: Integer; //loop iterators
TS, TE: DWORD; //tick counts
A: Integer; //for calculating average
begin
Avg:= TStringList.Create;
try
for X:= 0 to FilesToDownload.Count - 1 do begin //iterate through downloads
if FStopDownload then Break; //for cancelling
if Avg.Count >= AVG_BASE then //if list count is 20
Avg.Delete(0); //remove the oldest average
TS:= GetTickCount; //get time started
try
DownloadTheFile(X); //actual file download process
finally
TE:= GetTickCount - TS; //get time elapsed
end;
Avg.Add(IntToStr(TE)); //add download time to average list
A:= 0; //reset average to 0
for Y:= 0 to Avg.Count - 1 do //iterate through average list
A:= A + StrToIntDef(Avg[Y], 0); //add to total download time
A:= A div Avg.Count; //divide count to get average download time
Label1.Caption:= IntToStr(A); //<-- How to convert to TDateTime?
end;
finally
Avg.Free;
end;
end;
PS - 最後の 20 回 (または AVG_BASE) のダウンロードの平均速度を計算するさまざまな方法を受け入れます。その間に速度が変化する可能性があるため、すべてのダウンロードに基づいて計算したくありません。したがって、私は最後の20件だけをチェックしています。