AGB  ·  Datenschutz  ·  Impressum  







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

Wie Threads beenden und freigeben?

Ein Thema von DCoderHH · begonnen am 1. Dez 2016 · letzter Beitrag vom 1. Dez 2016
Antwort Antwort
Seite 2 von 2     12   
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Thread

  Alt 1. Dez 2016, 16:18
.. Du könntest das onTerminate Ereignis verwenden.
Damit könnte der Thread eine Nachricht absetzen wenn er beendet wird.
Die Nachricht könnte dein Haptprogramm veranlassen den Thread aus der Liste zu entfernen.
Das machst Du doch schon - wo ist dann das Problem?
Ja ich entferne den Thread aus der Liste. Das ist aber nur die halbe Miete. Er soll auch freigegeben werden. Kann er aber nicht, da man free() in OnTerminate nicht aufrufen kann.
.. wenn die Liste leer ist - laufen keine Threads mehr,
denn du löscht den Thread aus der Liste wenn er sich beendigt hat.

Wie der Name schon sagt FreeOnTerminate wird der Thread freigegeben wenn er beendet ist.
Da musst Du nichts mehr freigeben.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

AW: Thread

  Alt 1. Dez 2016, 16:34
Immer wenn einen neue Instanz erzeugt/gestartet wird, sollen alle anderen Threads beendet und *freigegeben* werden. Die neue Instanz soll sofort gestartet werden, egal was die anderen Threads noch machen, das das Beenden zeitintensiv sein kann.

Beim Beenden des Programms sollen alle noch laufenden Thread beendet werden und das Programm erst schließen, wenn alle Thread fertig sind.
Wenn ich das richtig sehe, läuft nie mehr als ein Thread, denn sobald einer gestartet wird, sollen die anderen ja beendet werden. Folglich kann zur gleichen Zeit immer nur ein Thread laufen. Es sei denn, der User schafft es schneller zu klicken (einen zweiten Thread zu starten) als vom System Zeit dafür benötigt wird, einen Thread zu starten. Irgendwie passt das alles nicht zusammen, oder ich bin zu kaputt um es zu kapieren
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Thread

  Alt 1. Dez 2016, 17:38
Threads immer mit FreeOnTerminate = TRUE, damit hat man in Summe den geringsten Stress. Wenn das Ende des Threads von Bedeutung ist, einfach das OnTerminate - Event benutzen.

Das Warten beim Programmende kann man zwar machen, besser ist es ihmo den Thread so zu bauen, das er in Frieden sterben darf.

Die kleine Demo zeigt das Ende an und wartet (aber schön ist anders )
Angehängte Dateien
Dateityp: 7z ThreadsEnding.7z (1,4 KB, 19x aufgerufen)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Thread

  Alt 1. Dez 2016, 17:53
Ohne in dein Beispiel zu schauen, aber grade FreeOnTerminate = True und dann das Hauptformular zumachen ist gerade nicht in Frieden sterben lassen. Das ist eher von hinten anschleichen und in den Kopf schießen.

Oder meintest du dass man den Thread eher so bauen sollte dass er jederzeit einfach hart ausgeknipst werden darf?
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#15

AW: Thread

  Alt 1. Dez 2016, 18:15
Ist es eine Totsünde im FormCloseQuery bei CanClose True eine globale Variable auf TRUE zu setzen, welche der arbeitende Thread dann abfragt, seine Arbeit beendet und "sich in Frieden beendet"?
So würde ich es machen.

Klar, man kann auch auf Terminated prüfen. Aber ich persönlich würde es mit einer eigenen Variable machen und den Thread an sich gar nicht erst anfassen.

Geändert von a.def ( 1. Dez 2016 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz