Delphi » FAQ

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

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

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

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

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

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

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 "/")

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() =]