Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prozess bei laufenden Thread beenden (https://www.delphipraxis.net/213589-prozess-bei-laufenden-thread-beenden.html)

hoika 22. Aug 2023 19:09

Prozess bei laufenden Thread beenden
 
Hallo,
ich habe hier einen Thread, der wartet nicht auf ein Windows-Kernel-Object,
sondern läuft einfach über das übliche in TMyThread.Execute

while not Terminated do ...

Ich hatte mal gelesen, dass der eigentliche Prozess nicht beendet wird,
wenn noch ein Thread läuft.

Das ist scheinbar nicht so, sagt auch die WinAPI von MS (siehe oben).


Kann ich also davon ausgehen, dass mein laufender Thread beim Programmende nicht das Programm blockiert?

himitsu 22. Aug 2023 19:24

AW: Prozess bei laufenden Thread beenden
 
Ja, ein Prozess wird beendet, wenn irgendein Thread mit einer Exception bis zum Windows durch rauscht.

Darum hat TThread auch intern ein Try-Except um das Execute, siehe ThreadProc in System.Classes.
Über Thread.FatalException kommt man im OnTerminate, DoTerminate oder im Destroy (vor Inherited) da dran.


Ebenso hat die VCL deswegen um die meisten Events/Ereignisse ein Try-Except drumrum.
(nur bei Konsolenanwendungen, muß man es selber machen, aber darum enthält deren Codevorlage auch ein Try-Except)




Davon ausgehen: Nein, ähhh ja :lol:

Der Prozess wird geschlossen, wenn alle Threads beendet sind,
aber der Delphi-Hauptthread ruft am Ende ein Delphi-Referenz durchsuchenHalt aka MSDN-Library durchsuchenTerminateProcess auf und schießt ALLES brutal ab. :duck:

hoika 22. Aug 2023 20:35

AW: Prozess bei laufenden Thread beenden
 
Hallo,
schießt ALLES brutal ab

OK, das ist ja gemein ;)

Der schöne Günther 23. Aug 2023 08:26

AW: Prozess bei laufenden Thread beenden
 
Zitat:

When you exit a VCL application, the background threads are just killed off. The application does not wait for them, it just ends. If you want to wait for them, you will have to write the code yourself.

A VCL application, however, will wait (for all eternity, if necessary) for all the tasks that were put in the default thread pool (System.Threading.TThreadPool.Default).
Quelle: https://stackoverflow.com/a/51384481


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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