Befehl um das eigene Programm beenden zu können
-
Hallo,
in meinem Progamm soll es möglich sein, dass
der User die Anwendung beenden kann.(Also quasi wie das "X" rechts oben in der Titelleiste).
Gibt es dafür einen Befehl?
Viele Grüße
-
Hallo,
ich versteh nich ganz dein Problem ...
Normalerweise Beendest du doch dein Programm,
wenn du in der Main-Funktion einen return gibst:int main(){ return 0; //Fehlerfrei }
Du kannst ja ne Tastatureingabe abfragen und wenn die z.B. 'exit' ist,
dann soll er Beenden ...std::string eingabe; cin>>eingabe; if(eingabe == 'exit') return 0;
Falls es anders gemeint war, bitte nochmal genau schildern
Gruß Simon
-
er meint, dass man die konsole einfach schließen kann und eine fkt wie OnExit aufgerufen wird - aber dafür gibt es nichts (jedenfalls nix standardisiertes, da c++ keine konsole kennt)...
-> falsches forum:
windows -> winapi unterforum
unix -> unix unterforum oder wie auch immer das heißt ^^bb
-
unskilled schrieb:
er meint, dass man die konsole einfach schließen kann und eine fkt wie OnExit aufgerufen wird - aber dafür gibt es nichts (jedenfalls nix standardisiertes, da c++ keine konsole kennt)...
Aber würde nicht <csignal> genau das Bereitstellen?
http://www.cplusplus.com/reference/clibrary/csignal/signal/
-
hmm... das erste mal, dass ich den header sehe ^^
aber auf die schnelle hab ich jz nichts damit hinbekommen:
#include <csignal> #include <iostream> void terminate(int param) { system("PAUSE"); } int main() { void (*prev_fn)(int); prev_fn = std::signal(SIGTERM, terminate); for(;;) { if (prev_fn == SIG_IGN) std::signal(SIGTERM, SIG_IGN); } }
-
ich verwende FLTK.
Habe aber bisher noch keine "beenden-Funktion" in der Doku gefunden.Bei SIGTERM bin ich mir nicht sicher.
Das Programm sollte sich geordnet schließen.
-
Die Funktion, um ein Programm zu beenden heisst
exit()
. Wenn diese Angabe Dir nicht weiterhilft, schildere Dein Problem genauer.
-
exit(0);
das wars, Danke an alle.
-
Damit solltest du sehr vorsichtig sein, am besten
exit()
gar nicht anwenden. Das beendet das Programm abrupt, wodurch keine Destruktoren mehr aufgerufen werden und Ressourcen nicht richtig freigegeben werden könnten.Lieber
return
in dermain()
. Wenn das Programm ein wenig strukturiert ist, sollte man auch nicht das Bedürfnis haben, von irgendwelchen Funktionen aus das Programm zu beenden.
-
Notfalls kann man (wenn ein Fehler oder undefiniertes Verhalten auftaucht) einen Exception-Algorhythmus einbauen, damit der Programmfluss wieder nach main() gebracht wird. Dann kann man einfach return 0; im catch-Block ausführen lassen und Tada; wird das Programm beendet.
-
ich programmiere in fluid. Leider ist es da nicht
möglich ein return in einer Funktion unterzubringen.Vielleicht kennt jemand hier eine Funktion mit der
die Applikation geordnet beendet werden kann?
-
Der aus dem Westen ... schrieb:
Notfalls kann man (wenn ein Fehler oder undefiniertes Verhalten auftaucht) einen Exception-Algorhythmus einbauen, damit der Programmfluss wieder nach main() gebracht wird. Dann kann man einfach return 0; im catch-Block ausführen lassen und Tada; wird das Programm beendet.
bei Fehlern oder undefiniertem Verhalten sollte man kein
return 0;
schreiben, sondern einen Wert != 0 nehmen. 0 bedeutet: es war alles in Ordnung
-
Du hast recht. Nicht 0 zurückgeben, es sei denn, es ist kein "richtiges" Programm (also nur zu Übungszwecken oder Tools für andere Aufgaben).
-
Ich frage mich gerade, wie man undefiniertes Verhalten zur Laufzeit erkennt.
(Keine Angst, ich weiss schon, was du meinst).Bei schlimmen Logikfehlern muss man das Programm ja auch nicht normal beenden, da nimmt man am besten
abort()
. Das sollte allerdings eher während der Debug-Phase passieren.exit()
setzt man eher in C ein. Da spielt es keine grosse Rolle, ob der Stack noch sauber abgeräumt wird, und freigeben muss man eh von Hand.