Witam,
Mój problem polega na tym, że chciałym zaoszczędzić czas (czytaj przyspieszyć algorytm), przy pobieraniu wielu stron internetowych na raz.
W czym rzecz:
Korzystam z komponentu IdHttp (pakiet INDY) i mam zamiar zparsować (wyciągnąć dane) z wielu stron internetowych w jak najkrótszym czasie.
Adresy stron zbudowane są na zasadzie:
www.strona.com/?x=wartosc1
www.strona.com/?x=wartosc2
www.strona.com/?x=wartosc3...
"wartości" mam zapisane w tablicy i odczytanie ich to nie jest problem.
Dotychczas próbowałem uruchomić jeden wątek 5 razy (z numerem kolejnym) by pracowały równolegle i parsowały stronę przy użyciu dostępnej gdzie indziej w kodzie funkcji wykorzystującej komponent IdHttp.
Pseudokod:
Wywołanie wątków:
twTimer.Create(0);
twTimer.Create(1);
twTimer.Create(2);
twTimer.Create(3);
twTimer.Create(4);
Deklaracja wątku:
TwTimer = class(TThread)
private
numer:integer;
procedure SetProprties;
protected
procedure Execute; override;
public
constructor Create(numer_kolejny:integer);
end;
Ciało wątku:
constructor TwTimer.Create(numer_kolejny:integer);
begin
inherited Create(False);
numer:=numer_kolejny;
end;
procedure TwTimer.Execute;
begin
FreeOnTerminate := True;
Synchronize(SetProprties);
end;
procedure TwTimer.SetProprties;
var
i:integer;
begin
i:=0;
{
kazdy wątek odczytuje kolejno co piątą wartość z pamięci:
pierwszy wątek: 0,5,10,...
drugi: 1,6,11..
itd.
*ppt_count_max to maksymalna liczba, jaką może osiągnąć licznik
}
while i*5+numer<ppt_count_max do
begin
get_page(tab_p[i*5+numer].wartosc); //funkcja pobierająca stronę na podstawie "wartosci" z pamieci
end;
end;
#edit (na podstawie poniższego posta):
I tu jest mój problem:
Dodałem sobie na formie dodatkowy "licznik" na labelu i ilość pobranych stron idzie w tym samym tempie, co w momencie, gdybym nie stosował żadnych wątków (pobierając źródła stron zwykłą pętlą).
Nie wiem czemu mój sposób z wątkami nie przyspiesza całej tej procedury :/
Co polecacie abym wykorzystał?
Znacie może jakąś dobrą metodę / pomysł, jak pobrać wiele stron internetowych na raz?
Bałagam o pomoc ... :C
<font size="1">PS. Nie wiem czemu to się pojawia --></span> </delphi>