![]() |
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! |
Re: Programm richtig beenden?
Wenn das Hauptformular geschlossen wird schließt sich alles.
Ansonnsten gäbs noch application.terminate und halt(0) . |
Re: Programm richtig beenden?
Delphi-Quellcode:
Application.Terminate;
|
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:
sollte das Programm beenden.
Application.MainForm.Close;
Wie man aus den anderen Antworten sieht: Viele Wege führen nach Rom. |
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:
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.
while (dont_close) do
begin Verarbeite_Nachrichten(); end; 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). |
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.
|
Re: Programm richtig beenden?
Zitat:
|
Re: Programm richtig beenden?
Ich hab ja gar nicht Jens gemeint. QuickAndDirty hat in #2 auch halt(0) als Alternative ins Spiel gebracht ;)
|
Re: Programm richtig beenden?
Zitat:
|
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 07:45 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 by Thomas Breitkreuz