AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke IdHTTP Downloadgeschwindigkeit...
Thema durchsuchen
Ansicht
Themen-Optionen

IdHTTP Downloadgeschwindigkeit...

Ein Thema von Z4ppy · begonnen am 17. Aug 2010 · letzter Beitrag vom 18. Aug 2010
Antwort Antwort
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: IdHTTP Downloadgeschwindigkeit...

  Alt 18. Aug 2010, 13:30
Ja, so ähnlich habe ich es jetzt auch gelöst, ich habe eine Variable auf false gesetzt, sie wird über einen Timer true gesetzt und wenn sie true ist, dann wird im OnWork der Code für die Anzeige ausgeführt und die Variablen werden neu gesetzt, ansonsten passiert nichts

Dein Code würde garantiert nicht gehen... Du verwendest AWorkCount im Timer, hast dieses aber nirgends gesetzt ^^

Hier mein Code:
var RunUpdate:boolean=false;
Delphi-Quellcode:
procedure TForm1.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
var Speed:integer; //Bytes pro sekunde
begin
  if RunUpdate then begin
    RunUpdate:=false;
    if (GetTickCount-FTime)>0 then Speed:=Round(1000*(AWorkCount-FBytes)/(GetTickCount-FTime))
    else Speed:=0;
    SpeedStatus.Caption:=GetSizeName(Speed)+'/s';
    FTime:=GetTickCount;
    FBytes:=AWorkCount;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  RunUpdate:=true;
end;
Natürlich wäre es nicht nötig, die Geschwindigkeit als Variable zu speichern, aber ich benötige sie noch ein paar mal mehr im OnWork und das hier ist nur der zentrale Code für die Geschwindigkeit. So wird diese auch schön in B/s, kB/s, MB/s usw. ausgegeben ^^

MfG Z4ppy

PS.: Wieso machst du das Format eigentlich in einem try-except-Block? Wenn GetTickCount-FTime>0 gilt, dürften ja keine Probleme auftreten können...

Geändert von Z4ppy (18. Aug 2010 um 14:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: IdHTTP Downloadgeschwindigkeit...

  Alt 18. Aug 2010, 15:18
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!

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.


Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: IdHTTP Downloadgeschwindigkeit...

  Alt 18. Aug 2010, 16:23
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz