![]() |
halt/exit/terminate/close
Hi!
Was sind eigentlich die Unterschiede zwischen Halt, Exit, Terminate und Close? Mit allen kann man das Programm beenden, mit Exit nur, wenn die aktuelle Prozedur das Hauptprogramm ist (was bedeutet das? im finalization-Teil?). Wann sollte man was benutzen, was sind die Vorteile sich gegenseitig gegenüber? Aus der Hilfe bin ich nicht schlau geworden. |
Re: halt/exit/terminate/close
Halt beendet das Programm ziemlich brutal, ist also nicht zu empfehlen. (Delph6-Hilfe (EN): "Initiates abnormal termination of a program.")
Exit springt an das Ende der aktuellen Funktion/Prozedur. Ist machmal ganz praktisch. Terminate ist eine Funktion von TApplication, also deiner Anwendung. Zum Beenden eines Programmes ist dies am besten, da dem Programm gesagt wird "so, jetzt darfst du dich beenden", so dass Resourcen noch freigegeben werden können (im Gegensatz zu Halt) Close ist eine Funktion von TForm. Damit wird das jeweilige Fenster geschlossen. Ist dieses Fenster das Hauptfenster, so wird Apllication.Terminate automatisch aufgerufen. |
Re: halt/exit/terminate/close
Danke erstmal!
Aber es gibt doch sicherlich auch Situationen, in denen man Halt verwenden sollte. Wenn die Prozedur, in der Exit aufgerufen wird, das "Hauptprogramm" ist, wird laut der Hilfe auch das Programm beendet. Was ist denn das "Hauptprogramm"? |
Re: halt/exit/terminate/close
Hi,
das "Hauptprogramm" ist das, was in deiner DPR-Datei zwischen "begin" und "end" steht ;) mfG mirage228 |
Re: halt/exit/terminate/close
[Mein Senf dazu]
Zitat:
Zitat:
[/Mein Senf dazu] Edit: Der Abort ist manches mal auch praktisch, der alle Prozeduren im Stack auf Stumme art und weise verlässt. |
Re: halt/exit/terminate/close
@Sunlight7: Das mit dem Finally-Block wusste ich nicht.
TThread.Terminate (übrigens gibts auch TWebSession.Terminate :dancer: ) war wohl nicht gemein. @Cöster: Halt ist ein Überbleibsel aus Turbo Pascal Zeiten und hat meiner Meinung nach heute keine Vorteile mehr. |
Re: halt/exit/terminate/close
Man lernt doch immer was dazu :???:
Der Halt hat für mich große Vorteile, den nehme ich anstelle von ShowMessage, wenn ich testen will, ob irgendein neues Ding funktioniert :mrgreen: |
Re: halt/exit/terminate/close
Zitat:
|
Re: halt/exit/terminate/close
Nicht ganz verstehen. :gruebel:
Wenn ich ShowMessage nehmen würde, müßte ich zuerst OK klicken und dann noch das Programm schließen, bis ich zum Quelltext komme. Bei Halt macht sich das Programm zu und ich weiß, es hat funktioniert. OK, man könnte auch Application.Terminate nehmen, aber Halt schreibt sich halt mal schneller :mrgreen: |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
|
Re: halt/exit/terminate/close
Zitat:
|
Re: halt/exit/terminate/close
Das stammt IMHO noch von DOS zeiten, vergleichbar mit dem System-Befehl von Basic.
|
Re: halt/exit/terminate/close
Halt entspricht dem "Return" der Main-Funktion auch C
Man kann bei Halt also ein Returncode zurück geben welcher dann über Errorlevel abgefragt werden kann. Somit haben andere Programme die Mögichkeit herauszufinden ob ein Programm ordentlich durchgelaufen wurde oder abgebrochen. Dies wird zum Beispiel von Setup-Programmen genutzt welche andere Programme aufrufen. Liefert ein Programm welches vom Setup ausgeführt wird nicht das entsprechende Errorlevel zurück wird das ganze Setup abgebrochen etc. |
Re: halt/exit/terminate/close
Moin Zusammen,
also für mich ist in den meisten Fällen close der Befehl mit dem ich ein Programm beende. Application.Terminate hat, für mich, den Nachteil, dass es das OnClose- und vor allem das OnCloseQuery-Event nicht aufruft. Die werden zwar nicht immer benötigt, aber wenn doch muss ich mir anschliessend keine Gedanken darum machen, warum die genannte Events wohl nicht durchlaufen werden ;-) Halt kommt bei mir eigentlich nur dann in Frage, wenn ich, wie Jens schon erläutert hat, ein Konsolenprogramm habe, dass über Errorlevel einen Rückgabewert hat. |
Re: halt/exit/terminate/close
Mir fällt grad noch ein das bei Halt noch die "Finalization"-Abschnitte durchlaufen werden. Gibt es eine Variante wo dies nicht der Fall ist? Ich hab's bisher immer mit TerminateProcess gelöst wenn ich dies verhindern wollte was aber nicht die feine englische Art ist.
|
AW: halt/exit/terminate/close
Hi! Mal ne wichtige Frage:
Angenommen, ich erstelle irgendwo im Programm ne Menge Objekte und beende es irgendwann mit Halt. Sofern es nirgends unter finalization geschieht, werden diese Objekte ja nicht zerstört. Wird der Speicher unter Windows dann trotzdem freigegeben, nachdem das Programm mit Halt abgebrochen wurde? Bzw. wird nach dem Schließen/Abbrechen eines Programms nicht ohnehin sämtlicher Speicher (auch Speicherlecks), der durch dieses belegt wurde, freigegeben? Beste Grüße! Robert |
AW: halt/exit/terminate/close
Hallo Robert,
Wenn das Programm beendet wird, dann markiert Windows alle vom Programm verwendeten Speicherseiten wieder als frei. |
AW: halt/exit/terminate/close
Vielen Dank für die schnelle Antwort, Neutral General! :thumb:
|
AW: halt/exit/terminate/close
Probleme kann es z.B. bei gemeinsam genutzten DLLs geben. Ich weiß nicht, ob das für neue Windowsversionen auch gilt, aber zumindest bei XP noch wurden solche DLLs dann nicht mehr unbedingt entladen (wenn der Code zum entladen dann nicht mehr erreicht wird), weil die Referenzzählung durcheinander kam.
Unter anderem deshalb ist Halt nicht für produktive Anwendungen geeignet. |
AW: halt/exit/terminate/close
Zitat:
|
AW: halt/exit/terminate/close
Zitat:
|
AW: halt/exit/terminate/close
Zitat:
|
AW: halt/exit/terminate/close
Ich glaub das war so:
Vor der NT-Reihe nutzten die Programme noch einen gemeinsamen Speicherbereich. Programme konnten sich gegenseitig Speicher überschreiben (bei einem Problem, z.B. mit falschen Zeigern, war also nicht unbedingt nur das eigene Programm gefährdet). Da alle Programme den selben Speicherbereich nutzten und sich Windows nicht merkte wer was reserviert hat, konnte Windows auch nicht aufräumen, wenn ein Programm beendet wurde. Ähnlich verhielt es sich auch mit anderen Ressourcen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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