Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie beende ich mein Programm/Thread richtig ? (https://www.delphipraxis.net/820-wie-beende-ich-mein-programm-thread-richtig.html)

PattyPur 12. Sep 2002 04:47


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:
 
Checkthread.terminate;
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.

Luckie 12. Sep 2002 05:05

Pack das mal in OnCloseQuery rein.

PattyPur 12. Sep 2002 06:20

und woher soll ich das nehmen ich habe doch keine komponente die dieses Event besitzt
ich will aj ohne eine Form auskommen

Luckie 12. Sep 2002 06:27

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.

Christian Seehase 12. Sep 2002 10:58

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.

PattyPur 13. Sep 2002 22:03

Vielen dank werd es gleich mal ausprobieren

Nachtrag:
@Luckie dein Sort'It programm sieht nach einem Durchlauf bei mir so aus:

http://www.pattypur.de/pictures/SortIt.jpg

(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