AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Beenden von TThreads

Offene Frage von "TomyN"
Ein Thema von Eric Mauch 15 · begonnen am 25. Jun 2025 · letzter Beitrag vom 29. Jun 2025
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#1

AW: Beenden von TThreads

  Alt 25. Jun 2025, 10:53
Du brauchst also was Externes/Gemeinsames, z.B. ein TEvent, aber ambesten als Interface oder in einer synchronisierten Variable.
So kannst'e von außen dem Thread sagen, dass er sich beenden möge. (falls er noch läuft und nicht schon fertig/freigegeben war)

Oder eine externe Liste/Variable, wo reingeschrieben werden kann "Hey Thread, beende dich bitte"
und der Thread schaut regelmäßig da drin nach.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#2

AW: Beenden von TThreads

  Alt 25. Jun 2025, 12:27
Du könntest auch die Threads in einer TList halten.
Wenn du einen neuen aufmachst, schickst du den alten Threads das Terminate, woraufhin die ihre Events auf nil setzen und die eigenen funktionen beenden, und startest den neuen mit den passenden Events.
Und den OnTerminate-Event kannst du ja nutzen um deine TList sauber zu halten.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Beenden von TThreads

  Alt 25. Jun 2025, 13:40
Vielleicht hilft Dir das Video!

Mavarik
  Mit Zitat antworten Zitat
Eric Mauch 15

Registriert seit: 25. Jun 2025
6 Beiträge
 
#4

AW: Beenden von TThreads

  Alt 25. Jun 2025, 14:04
Vielen Dank schon mal für die Antworten.

Am Liebsten wäre mir halt wenn ich mir sicher sein kann, dass der Thread jetzt nichts mehr macht.
So will ich z.B. verhindern, dass wildes rumklicken des Benutzers immer mehr neue Threads startet.

Sogesagt ein Neustart des Threads mit anderen Parametern (z.B. anderes Postfach).
Dachte irgendwie nicht, dass das eine so spezielle Anforderung ist, dass es da eine perfekte Lösung gibt ...

Habe es mittlerweile so, dass ich mit im OnTerminate jetzt den Thread in eine Liste speichere und diese bei bestimmten Aktionen bereinige.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.210 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Beenden von TThreads

  Alt 25. Jun 2025, 14:51
So will ich z.B. verhindern, dass wildes rumklicken des Benutzers immer mehr neue Threads startet.
Bei Gelegenheit solltest du dir wirklich mal Tasks (statt Threads) und den dortigen TThreadPool anschauen. Vielleicht hilft das auch für die Zukunft bei anderen Dingen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#6

AW: Beenden von TThreads

  Alt 25. Jun 2025, 16:09
Du könntest auch die Threads in einer TList halten.
Da sich diese Threads selbst freigeben, muß der Zugriff auf die Liste und auch der weitere Zugriff auf den/die Thread(s) abgesichert werden (z.B. CriticalSection).

Die Threads müssen sich ja selbst auf der Liste entfernen, wenn sie sich freigeben.
Und während man sich eine Referenz auf der Liste holt und so lange man mit dieser Thread-Referenz arbeitet, darf sich der Thread auch nicht freigen.


Bezüglich der Syncronisation und den Zugriff ("beende dich"-Befehl) ist es aber auch egal, ob Thread, Task oder Dergleichen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
172 Beiträge
 
Delphi 12 Athens
 
#7

AW: Beenden von TThreads

  Alt 25. Jun 2025, 19:53
Wenn Du sicher sein willst, dass der Thread nichts mehr macht, musst Du selbst innerhalb des Threads dafür sorgen, dass er nach einem Terminate nichts mehr macht...

Fragst Du denn im Thread bereits regelmässig ab, ob er sich beenden soll? Normalerweise hat man ja in der Execute-Methode eine Schleife drin, wie "While not Terminated do..." Wenn Du nur einen Thread hast, merkst Du Dir den und rufst Terminate auf. Der Thread wird sich dann beenden, sobald er wieder das "Terminated" abfragt und Du kannst einen neuen starten, ohne dies abzuwarten.

Eine Liste ist aber auch keine schlechte Idee, um beim Beenden des Programms sicherzustellen, dass alle kontrolliert beendet wurden.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz