Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm richtig beenden? (https://www.delphipraxis.net/127018-programm-richtig-beenden.html)

AlexanderBrade 6. Jan 2009 16:40


Programm richtig beenden?
 
Hallo, ich habe folgendes Problem:
Wie kann ich ein Programm wirklich beenden? Bei close schließt sich ja bloß das Formular! Manchmal aber (komischerweise) wird das Programm auch richtig beendet, z.B. wenn bloß ein Formular geöffnet ist!
Brauche dringend Hilfe!

QuickAndDirty 6. Jan 2009 16:41

Re: Programm richtig beenden?
 
Wenn das Hauptformular geschlossen wird schließt sich alles.
Ansonnsten gäbs noch application.terminate und halt(0) .

Mr_G 6. Jan 2009 16:41

Re: Programm richtig beenden?
 
Delphi-Quellcode:
Application.Terminate;

nahpets 6. Jan 2009 16:45

Re: Programm richtig beenden?
 
Hallo,

dass Schließen des Hauptformulars eines Programmes beendet dieses, in der Regel ist das erste Formular, das in der DPR-Datei erstellt wird, das Hauptformular.

Application.MainForm zeigt auf das Hauptformular,
Delphi-Quellcode:
Application.MainForm.Close;
sollte das Programm beenden.
Wie man aus den anderen Antworten sieht: Viele Wege führen nach Rom.

SirThornberry 6. Jan 2009 16:46

Re: Programm richtig beenden?
 
Letzendlich gibt es bei einem VCL Programm eine Schleife die ständig läuft. Diese Schleife ruft die ganze Zeit Nachrichten ab (wie Mausklicks, Zeichenanweisungen etc.). Kommt eine solche Nachricht an wird die entsprechende Funktion aufgerufen und dann geht es weiter in der Schleife bis eben der Schließenbefehl kommt.

Im groben kannst du es dir so vorstellen:
Delphi-Quellcode:
while (dont_close) do
begin
  Verarbeite_Nachrichten();
end;
Wenn du jetzt Close aufrufst oder dergleichen wird nur "dont_close" (auf obiges Beispiel bezogen) auf False gesetzt und somit wäre die Schleife zu Ende und das Programm läuft bis zum Ende durch.
Das kann allerdings nur passieren wenn die Funktion "Verarbeite_Nachrichten" zurück kehrt. Hast du Beispielsweise in einem ButtonClick eine Endlosschleife kehrt "Verarbeite_Nachrichten" natürlich nicht zurück weil die Befehle in deiner ButtonClick-Methode noch abgearbeitet werden.

Wenn also nach dem Close-Befehl dein Programm noch weiter läuft ist es sehr wahrscheinlich das du noch irgendwo in einer Schleife hängst. Du kannst ja einfach mal die Pause-Taste in Delphi drücken und schauen wo das Programm dann ist (Call-Stack)
Du kannst auch einfach einen Haltepunkt bei deinem Close-Befehl setzen und dann mit F8 die folgenden Befehle der Reihen nach abarbeiten um zu sehen wo er eventuell noch hängt (wenn das nicht geht eben Pause wählen).

DeddyH 6. Jan 2009 16:56

Re: Programm richtig beenden?
 
Ich denke anhand der Problembeschreibung, dass Stephans Antwort vermutlich die zutreffende ist. Halt würde ich gar nicht verwenden, solange ich nicht sehr triftige Gründe dafür habe.

Mithrandir 6. Jan 2009 18:38

Re: Programm richtig beenden?
 
Zitat:

Zitat von DeddyH
Halt würde ich gar nicht verwenden, solange ich nicht sehr triftige Gründe dafür habe.

Ich geh davon aus, dass Jens eher einen Haltepunkt (Breakpoint) zum Debuggen meint... ;)

DeddyH 6. Jan 2009 19:01

Re: Programm richtig beenden?
 
Ich hab ja gar nicht Jens gemeint. QuickAndDirty hat in #2 auch halt(0) als Alternative ins Spiel gebracht ;)

Mithrandir 6. Jan 2009 19:38

Re: Programm richtig beenden?
 
Zitat:

Zitat von DeddyH
Ich hab ja gar nicht Jens gemeint. QuickAndDirty hat in #2 auch halt(0) als Alternative ins Spiel gebracht ;)

Asche auf mein Haupt und meine Gesinnung... :|

idontwantaname 6. Jan 2009 19:54

Re: Programm richtig beenden?
 
Arbeitest du vielleicht mit Threads? Denn jeder laufender Thread, der nicht als Background-Thread gekennzeichnet ist, hält die Anwendung am Leben.


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

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