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