Einzelnen Beitrag anzeigen

Gravitar

Registriert seit: 8. Okt 2006
94 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Laden von HTML-Seiten mit Multithread

  Alt 8. Feb 2007, 22:19
Hi,

so, dass Problem ist gelöst! Über 60 parallele HTTP.Get's werden ohne Fehler ausgeführt.

Erstaunlicherweise funktioniert der schon gezeigte Source ohne jede Änderung, wenn man nur in der Aufrufschleife ein "Application.Processmessages" einfügt! (habe ich eigentlich nur gemacht, um die Aktualisierung des ListView hinzubekommen.

Hier nun die komplette Lösung (für diejenigen, die ähnliche Probleme lösen müssen):


Delphi-Quellcode:
{Definition}
TMyThread = class(TThread)
private
  fIdHTTP: TIdHTTP;
  i : integer;
  web : string;
protected
  procedure GetResult;
  procedure execute; override;
public
end;

{Ergebniss des Threads auswerten}
procedure tmythread.GetResult;
begin
  web := UTF8ToWideString(web);
  form1.ListView1.Items[i].SubItems.strings[4] := web;
  fidHTTP.free;
end;

{Thread ausführen}
procedure TMyThread.Execute;
begin
  i := x;
  fIdHTTP := TIdHTTP.Create(nil);
  web := fIdHTTP.get(form1.ListView1.Items[i].SubItems.Strings[4]);
  Synchronize(GetResult);
end;

{Je Zeile innerhalb der Listview wird ein Thread gestartet}
for x := 0 to listview1.Items.count-1 do
begin
  inc(threadcount);
  MyThread := TmyThread.create(true);
  MyThread.freeonterminate := true;
  mythread.Resume;
  sleep(10);
  application.ProcessMessages;
end;
Das wars auch schon.

Man beachte die application.processmessages in der Aufrufschleife. Wenn diese weggelassen wird, kommt es wieder zu den genannten Fehlern (..Time out...).

Wer kann erklären, warum das so ist?

Viele Grüße und nochmals Danke für die Hilfe

Andreas
  Mit Zitat antworten Zitat