Autor Beitrag
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: Do 13.09.07 20:03 
Hi,

in meinem Programm wird eine Datei gedownloadet und ich möchte gerne das der Speed und die Restzeit angezeigt wird.
Den Speed lass ich so errechnen:

[in OnWork]:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
      if (GetTickCount - FTime) >= 1000 then
      begin
        Speed := Format('%.2f KB/s', [(FWorkCount - FBytes) / (GetTickCount - FTime)]);
        oSpeed := Round((FWorkCount - FBytes) / (GetTickCount - FTime));
        FTime := GetTickCount;
        FBytes := FWorkCount;
      end;


[in OnWorkBegin]:
ausblenden Delphi-Quelltext
1:
  FTime := GetTickCount;					


Es aktualisiert sich allerdings etwas langsam und ist meistens zu ungenau, sodass auch die Restzeit sehr schwankt.
Die Restzeit lasse ich so errechnen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  function RestZeit: String;
  var
    Count, Size, toDownload, res: Integer;
    S: String;
  begin
    Count := Round(ProgressBar1.Position div 1024);
    S := floattostrF((round((Size/1024)*100))/100,fffixed,10,0); //kP wo es die Size hernimmt, sie ist jedenfalls richtig
    Size := StrToInt(s);
    toDownload := Size - Count;
    res := toDownload div oSpeed; //in oSpeed ist der Speed
    res := res div 60;  //damit es in Minuten ist
    Result := inttostr(res);
  end;


Die Restzeit ist allerdings nur in Minuten und ist, weil der Speed so ungenau ist, auch sehr ungenau. Weiß jemand wie ich den Speed genauer berechnen lassen kann und wie ich auch die Sekunden in der Restzeit anzeigen lassen kann? (z.B. Restzeit: 8:42)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 13.09.07 23:54 
Moin!

user profile iconHendi48 hat folgendes geschrieben:
Den Speed lass ich so errechnen:
[...]
weil der Speed so ungenau ist

Wenn ich das richtig sehe, dann berechnest du immer den aktuellen Durchsatz. Es würde vermutlich besser sein, den bisherigen Gesamtdurchsatz zu berechnen! :idea: Allerdings: da du eine Extrapolation anstellst, wird es immer eine Ungenauigkeit geben, das sollte dir klar sein. :mahn:

user profile iconHendi48 hat folgendes geschrieben:
Die Restzeit ist allerdings nur in Minuten [...] wie ich auch die Sekunden in der Restzeit anzeigen lassen kann?

ausblenden Delphi-Quelltext
1:
2:
Minuten := ZeitInSekunden div 60;
RestSekunden := ZeitInSekunden mod 60;

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Hendi48 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: Fr 14.09.07 14:42 
So, das mit der Restzeit hab ich jetz hinbekommen.
Den oberen Teil hab ich irgendwie nicht verstanden. :oops:
Kannst du mir das nochmal genauer erklären und vielleicht ein Beispiel geben?