Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
1. Dez 2017
Da hast du natürlich recht.
Jetzt, wo du es sagst ;-) Create wird ja noch im erzeugenden Thread ausgeführt, während Execute dann im eigentlichen Thread selbst läuft.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
1. Dez 2017
Das ist ein guter Hinweis. Das hätte ich machen sollen ;-)
Hatte ich ja, allerdings ist das oben genannte Problem aufgetreten, und er hat mir immer den Namen eines Threads überschrieben, aber die neu erzeugten nur mit ThreadID im Debugger dargestellt.
Das Problem konnte ich aber beheben, mit self.NameThreadForDebugging('THPing_'+IPAddr, self.ThreadID);. Nur so hat er wirklich den richtigen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
30. Nov 2017
Hab meinen Fehler gefunden.
Da ich ja die Threads über einen Timer erzeugt habe, aber vergessen habe, ihn vor dem RemoveAll auszuschalten, hat er fleißig nach dem beenden eine Thread mir den gleich mal wieder erzeugt ;-)
So kann man sich selber ins Knie schießen :-D
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
30. Nov 2017
Hm...wenn du mir noch erklären könnte, warum der FreeOnTerminate ausgeführt wird bevor die Execute-Routine abgearbeitet ist?
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
30. Nov 2017
Okay, oben genanntes Verhalten zum TheadNameForDebugging konnte ich durch folgende Änderung korrigieren:
self.NameThreadForDebugging('THPing_'+IPAddr, self.ThreadID);
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
30. Nov 2017
Richtig. Ich wollte jetzt nicht über Sinnhaftigkeit diskutieren. Es könnten genauso auch Threads sein, die x Information von x Quellen gleichzeitig abrufen sollten, ohne den Ablauf des Hauptprogramms zu stören. Aber das spielt keine Rolle.
Mir geht es darum, warum das Beenden so derart fehlschlägt.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Hobbycoder,
30. Nov 2017
Knallt nicht. Vielleicht, weil er die Threads nicht beendet.
Die Schleife in RemoveAll läuft auch weiter und hängt im
while self.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....