Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wie Threads beenden und freigeben? (https://www.delphipraxis.net/191037-wie-threads-beenden-und-freigeben.html)

Klaus01 1. Dez 2016 15:18

AW: Thread
 
Zitat:

Zitat von DCoderHH (Beitrag 1355169)
Zitat:

Zitat von Klaus01 (Beitrag 1355163)
.. 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

mm1256 1. Dez 2016 15:34

AW: Thread
 
Zitat:

Zitat von DCoderHH (Beitrag 1355147)
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 :stupid:

Whookie 1. Dez 2016 16:38

AW: Thread
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 8-))

Der schöne Günther 1. Dez 2016 16:53

AW: Thread
 
Ohne in dein Beispiel zu schauen, aber grade
Delphi-Quellcode:
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. :duck:

Oder meintest du dass man den Thread eher so bauen sollte dass er jederzeit einfach hart ausgeknipst werden darf?

a.def 1. Dez 2016 17:15

AW: Thread
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 2 von 2     12   

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