Knallt nicht. Vielleicht, weil er die Threads nicht beendet.
Die Schleife in RemoveAll läuft auch weiter und hängt im
Delphi-Quellcode:
while self[i].Running do
Sleep(50);
Anzahl der Threads verändert sich aber nicht. Als wenn der Thread auf das Terminate nicht reagiert.
was mir weiterhin auffällt, ich vergebe mit
self.NameThreadForDebugging('THPing_'+IPAddr);
eine Namen für den Thread. Dieser wird aber wohl nur für den ersten Thread verwendet. Denn in der
IDE wird nur ein Thread mit diesem Namen angezeigt, es müsste aber bei allen 11 Thread ein passender Name stehen.
In dem Zusammenhang ist mir aufgefallen, dass in der
IDE unter Thread-Status der NameThreadForDebugging zwar verwendet wird, aber die Thread-ID sich nicht verändert.
Also, wenn ich im Create des Threads einen Haltepunkt setze und die Threads nacheinander erzeugen lasse,
dann ist beim ersten mal: THPing_10.161.207.1(17732)
beim Zweiten Thread: THPing_192.1.1.6(17732) <-- Name geändert, aber ID gleich ??
beim dritten Thread: THPing_192.1.1.6(17732) <-- das gleiche
Es kommen aber Thread-ID's hinzu, nur wird der NameForDebugging immer beim ersten erzeugten Thread geändert.
Erzeugt werden so:
Delphi-Quellcode:
ar
th: TTh;
begin
th:=TTh.Create;
th.IPAddr:=IPAddr;
th.Thread:=TThPing.Create(True, IPAddr);
if Assigned(FPingSuccess) then th.Thread.OnPingSuccess:=FPingSuccess;
if Assigned(FPingError) then th.Thread.OnPingError:=FPingError;
th.Thread.OnThreadStarted:=ThreadStarted;
th.Thread.OnThreadEnded:=ThreadEnded;
th.Thread.Resume;
self.Add(th);