Hm komisch und irgendwie prägnant für das Problem ist, dass wirklich
zu 90 % die ersten 3-4 Threads bzw deren Index nicht in meiner Listbox
auftreten.
Synchronize wird nur aufgerufen wenn es keine
Exception gegeben hat.
weil nur dann ist done = true!
Ich hab die Execute Procedur jetzt mal umgestellt
und jetzt werden auch die threads 0-4 in meiner listbox
angezeigt
komischerweise fängt die liste damit immer
an. also immer 0 - 4 in reihenfolge.die nachfolgenden
Indizes die aufgelistet werden sind dann durcheinander.
Kann es sein das es etwas mit den zulässigen Verbindungen
des Servers zu tun hat? 0-4 werden direkt zugelassen
und damit auch als erste fertig während die anderen
danach in der warteschleife (also meine while schleife im
thread) hängen und dann erst nach und nach abgearbeitet werden
können?!
irgendwie ist das alles sehr komisch.
Code:
procedure CheckThread.Execute;
var IdHttp1 : TIdHTTP;
Request: TStringList;
MyStream : TMemoryStream;
done : boolean;
begin
WHILE NOT(done) DO
BEGIN
IdHttp1 := TIdHTTP.Create(nil);
Request := TStringList.Create;
MyStream := TMemoryStream.Create;
TRY
done := False;
idHttp1.RedirectMaximum := 15;
idHttp1.HandleRedirects := True;
TRY
IdHttp1.Request.ContentType := 'application/x-www-form-urlencoded';
Request.Add('&PHPSESSID='+SID);
IdHttp1.Post(
url,Request,MyStream);
MyStream.WriteBuffer(#0' ', 1);
MyStream.Position := 0;
...
done := True;
EXCEPT
ON
Exception DO
done := False;
END;
FINALLY
MyStream.Free;
Request.Free;
IdHttp1.Free;
END;
END;
IF done THEN
Synchronize(SendUrl);
END;