Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Programm richtig beenden?

  Alt 6. Jan 2009, 16:46
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).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat