![]() |
Wie beende ich mein Programm/Thread richtig ?
Ich hab da mal was ausprobiert :
Code:
program threadApp;
uses classes; type TCheckThread = class(TThread) protected procedure Execute; override; end; {$R *.res} var CheckThread : Tcheckthread; Procedure TCheckThread.execute; var found:boolean; i:integer; begin while not terminated do begin //.... hier passiert halt was ! end; end; begin Checkthread:=Tcheckthread.Create(false); Checkthread.Execute; end. Das programm läuft wenn es gestartet wurde einfach weiter und weiter und weiter... - Soll es auch nur wenn windows runtergefahren wird kann dieses Programm nicht von Windows beendet werden und ich kann nur mit Task->beenden mein programm schliessen. Wie reagiere ich da richtig auf Die anweisung von Windows ? also ich weiss das ich irgendwie eine art onClose - Event benötige in dem ich auch sage
Code:
zuerst hatte ich mein Programm in verbindung mit einer TForm (standard Anwendung halt) und hab das onClose event der Form benutzt um meinen thread zu terminieren - nur da ich die Form für sonst nix brauche will ich auch ohne sie auskommen.Checkthread.terminate; |
Pack das mal in OnCloseQuery rein.
|
und woher soll ich das nehmen ich habe doch keine komponente die dieses Event besitzt
ich will aj ohne eine Form auskommen |
Dann mach es ohne VCL. Registrier eine Fensterklasse. Erzeuge ein unsichtbares Fenster, dann hast du eine Messageloop in der du WM_QUERYENDSESSION abfagen kannst und deine Thread beenden kannst.
Und wenn du dann noch was drauf hast, nimmst du auch nicht die Threadklasse von der VCL, sondern machst es zu Fuß mit der WinAPI. Beispielcode zu Threads: SortIt auf meiner Seite. Und dass dein Programm nicht beendet wird, ist auch klar. Es hat ja keine Messageloop an die Windows ein WM_QUIT beim Runterfahren senden könnte. Ergo läuft es und läuft und läuft und Windows fährt nicht runter, weil noch ein Prozess (Programm will ich es mal nicht nennen :wink: ) aktiv ist, der sich nicht beenden läßt. |
Moin Zusammen,
bei einem Konsolenprogramm könnte man sich da wohl auch mit SetConsoleCtrlHandler behelfen. Die Routine fängt dann das CTRL_LOGOFF_EVENT und das CTRL_SHUTDOWN_EVENT ab. |
Vielen dank werd es gleich mal ausprobieren
Nachtrag: @Luckie dein Sort'It programm sieht nach einem Durchlauf bei mir so aus: ![]() (ich dachte ich zeigs Dir mal |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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