Dein Code würde garantiert nicht gehen... Du verwendest AWorkCount im Timer, hast dieses aber nirgends gesetzt ^^
Einspruch: AWorkCount ist ein Parameter der an die Prozedur die mit OnWork verknüpft ist übergeben wird, also existiert er doch!
Einspruch, er verwendet AWorkCount im OnTimer... Und der Timer übergibt kein AWorkCount
Round(1000*(AWorkCount-FBytes)/(GetTickCount-FTime))
Also das macht ja mal überhaupt keinen Sinn. Du vergleichst die Zeit ab dem Anfang des Downloads mit dem 1000-fachem Downloadvolumen, welches zwischen zwei Aufrufen von IdHTTPWork geladen wurde. Es muss +FBytes heißen. Außerdem musst du dann drunter auch
FBytes:=AWorkCount + FBytes;
schreiben.
Grund: Du willst ja eine mittlere Geschwindigkeit, nicht irgendwas.
Falsch, ich möchte die aktuelle Geschwindigkeit, die totale kann ich ausrechnen, ich weiss die totale Grösse und kann ja die Zeit messen von Anfang bis Ende mittels WorkBegin bzw. WorkEnd ^^
Nur war das Problem, dass eben das Interval zwischen den OnWork-Aufrufen zu klein war und da grosse Ungenauigkeiten auftraten und deshalb die Geschwindigkeit so schwankte.
Und der Ausdruck macht sehr wohl Sinn, GetTickCount liefert Millisekunden, mit dem Faktor 1000 gibt das dann wieder Bytes pro Sekunde. Ich könnte natürlich auch die Zeit durch 1000 teilen, das kommt aufs Gleiche raus.
MfG Z4ppy