Prędkość pobierania w HTTPGet

Demonical Monk

W tym punkcie FAQ opiszę w jaki sposób zmierzyć prędkość pobierania za pomocą komponentu HTTPGet.
Żeby główna procedura działała, musisz najpierw się przygotować. Na formie musi znajdować się HTTPGet oczywiście oraz ProgressBar zmieniany przez zdarzenie HTTPGet OnProgress w następujący sposób:

ProgressBar1.Max := TotalSize;
ProgressBar1.Position := Readed;
Timer1.Enabled := True;

Musisz jeszcze do zmiennych w projekcie dodać następujące zmienne:

var
  //[...]
  LastCheck, ValueKBSec, PPos: Integer;

implementation

Teraz zajmiemy się samym wyliczaniem prędkości. Wstaw na formę Timer, ustaw mu interval 1000, wyłącz i na zdarzenie OnTimer wywołaj kod:

PPos := ProgressBar1.Position;
ValueKBSec := ProgressBar1.Position - LastCheck;
ProgressBar1.Position := PPos;
ValueKBSec := ValueKBSec div 1024;
LastCheck := ProgressBar1.Position;
//No i mamy zapisaną ilość kB na sekundę w zmiennej ValueKBSec.

Teraz trzeba tylko wyłączyć Timer w określonych sytuacjach. Do HTTPGet OnDoneFile i OnError dodaj:

Timer1.Enabled := False;
FAQ

8 komentarzy

jak wyświetlić zmienna ValueKBSec w ShowMessage / Prosze ;(

A na co komu jest potrzebne ile tysięcznych kilobajta mu się ściąga na sekundę?

eee, jak trzeba jeszcze to zdobywać to mi się nie chcę, zostanę przy Indym =]

rzecz w sumie prosta ale nuuuuddnaaa, a tablicy nie trzeba, można by zrobić wątek którego się nigdzie nie przypisuje, argumentami jego Create będzie co i jak ma pobrać, a on sam będzie ściągać i wywoływać procedurę która updatnie pasek podstępu dwie od zwiększania i zmniejszania licznika ( żeby wiedziało ile pobieranych jest )

a gdzie w ogóle ( w jakiej grupie ) jest HTTPGet, bo ja takie rzeczy robiłem przy użyciu TIdHTTPClient.Get() =]

To już osobny punkt będzie. Można zrobić tablicę HTTPGetów :)

zrób żeby radziło sobie z pobieraniem paru naraz to cię pochwalę =]

gdyby zmienna ValueKBSec miała typ extended, dodać jeszcze stringa, użyć FormatFloat to prędkośc była by wyświetlana dokładniej (jeszcze operator "div" zmienic na "/")