Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#4

AW: Threads in einer Liste halten und kontroliert beenden

  Alt 30. Nov 2017, 16:24
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);
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (30. Nov 2017 um 16:40 Uhr)
  Mit Zitat antworten Zitat