Entwickler-Ecke

Internet / Netzwerk - GENAUE Geschwindigkeit und Restzeit errechnen


Hendi48 - Do 13.09.07 20:03
Titel: GENAUE Geschwindigkeit und Restzeit errechnen
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]:

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]:

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:

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 - Do 13.09.07 23:54
Titel: Re: GENAUE Geschwindigkeit und Restzeit errechnen
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?


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

cu
Narses


Hendi48 - 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?