IdHTTP Downloadgeschwindigkeit anzeigen?



  • Hallo,
    ich lade Dateien mit der Indy Komponente runter, nun möchte ich gerne die Geschwindigkeit anzeigen lassen.

    Wie könnte ich die Geschwindigkeit ambesten berechnen?

    Ich bedanke mich schonmal für die Hilfe.

    MfG



  • Hallo

    Du addierst die Anzahl aller übertragenen Bytes auf eine interne (Member-)Variable. Mit einem zusätzlichem Timer fragst du nun diese Variable in einem festgesetzten Intervall ab (z.B. 1 Sekunde) und setzt die Zählervariable nun wieder auf 0. Aus dem Intervallzeitraum und den darin aufgezählten Bytes kannst du alles weitere berechnen.

    bis bald
    akari



  • Vielen Dank.

    Ich habe im Ereignis OnWork eine Zählvariable eingebaut und lasse diese mit einem Timer nach 1 Sekunde wieder auf 0 stellen, natürlich Speicher ich die anzahl vorher in einem anderen Variable.

    Ich weiss jetzt nicht, ob ich das so richtig gemacht habe, wenn ja, wie kann ich jetzt die anzahl der Bytes in Killobytes (kb/s) berechnen?

    Ich hab das mal so versucht:

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Form1->Caption = bytezaehler*2;
      bytezaehler = 0;        
    }
    

    EDIT: ups, hab /2 statt /1024 stehen 😡 ich versuchs ambesten nochmal.

    EDIT: Ich hab das jetzt mal so versucht:

    Label7->Caption = IntToStr(bytezaehler)+" kB/s";
    

    Klappt auch nicht ganz richtig.

    Da stimmt aber irgendwas nicht, der Zähler springt manchmal von 218 auf 4 oder von 4 auf 150 u.s.w.

    Danke schonmal.

    MfG



  • Hallo,

    was denn nu? 😃 *2, /2 oder /1024 ?

    Wann wird denn bytezaehler deklariert und wo wird der Variable ein Wert zugewiesen?

    mfg, Micha



  • Hier ist mal das OnWork Ereignis von mir:

    void __fastcall TForm1::IdHTTP1Work(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCount)
    {
      CGauge1->Progress = AWorkCount;
      Application->ProcessMessages();
      bytezaehler++;
      minbyte = AWorkCount;
      Label6->Caption = IntToStr(minbyte/1024)+" / "+IntToStr(maxbyte/1024)+" kB";
      Label7->Left = Label6->Width+Label6->Left+3;
    }
    

    Woran könnte der fehler denn liegen?

    Achja, manchmal hat das Ereignis (OnWork) verzögerung und deswegen bleibt der zähler manchmal stehen von bytezaehler und der Timer stellt den bytezaehler jede Sekunde wieder auf 0, des ist der grund wieso der zaehler manchmal von 4 auf 150 oder von 200 auf 7 runter springt, u.s.w.
    Irgendwas stimmt da nicht so richtig.

    Edit: @RandomAccess85 sry, ich hatte mich vertippt, /2 hatte ich gemeint, aber Bytes in Killobyte zu berechnen, sollte man ja Byte / 1024 rechnen, um die Killobytes zubekommen.

    Edit: Bytezaehler habe ich am anfang definiert, unter TForm1 *Form1;

    MfG


Anmelden zum Antworten