Programm sofort abbrechen/beenden
-
witte schrieb:
Ich würde lieber werfen. Mach ein Exception-Typ, sowas wie notrecoverableException, den die Handler weiter nach oben werfen. Bei exit() usw, kann das noch eine Weile dauen, bis die Botschaften-Warteschlange abgearbeitet wurde.
Verstehe ich nicht. Wenn exit aufgerufen wird ist sofort Schluß mit der Applikation, da dauert gar nichts, einzig die atexit Routinen werden aufgerufen...
-
danke
also ich habe mich für exit() entschieden. das mit atexit ist auch interessant aber das muss ich mir später mal anschauen ob ich das gebrauchen kann. hatte erst noch terminate() probiert aber das scheint das selbe zu sein wie abort(), also von der dialogbox her gesehen.
von dem sofortigen beenden der anwendung sollte der benutzer in der regel nicht betroffen sein. die klasse lädt die konfiguration ein aber ohne sie pauschal zu laden. ich als programmierer muss gezielt die werte laden die ich benutzen will. und wenn ich werte benutze ohne sie vorher geladen zu haben dann soll die anwendung sich beenden und ich bekomm meine mitteilung und weiss warum. wenn der benutzer an seiner konfiguration rumspielt werden die init funktionen der klasse hier schon eingreifen und die anwendung mit einer entsprechenden meldung 'sanft' beenden.
-
Es geht auch brutal mit: SendMessage(hwnd,WM_DESTROY,o,oL) an das
Hauptfenster der Anwendung.
-
berniebutt schrieb:
Es geht auch brutal mit: SendMessage(hwnd,WM_DESTROY,o,oL) an das
Hauptfenster der Anwendung.Dann kannst Du auch gleich TerminateProcess aufrufen...
Ich hoffe niemand macht so was wirklich!
-
Und bitte berücksicgtige, dass bei den harten Methoden nicht immer eventuelle vorhandenen Referenzen auf DLLs wieder freigegeben werden. Aber es gibt eigentlich keinen Grund sein Programm or die wand zu fahren. Es gibt immer eine Möglichkeit es sabft zu beenden. Wenn nicht, hast du mit ziemlicher sichrheit einen Designfehler im Programm.
-
Auf die brutale Methode lassen sich auch fremde Programme abbrechen. Also warum nicht?
-
Siehe es mal so... Neo muss auch vorher eine Telefonzelle bevor man den Stecker
ziehen kann. Zieht man Ihn einfach so können evtl. Gehirnschäden zurück bleiben
-
ja aber neo hatte auch nicht so einen mächtigen verbündeten wie das betriebssystem, das immer so gut wie alles aufräumt, was wir dreckig machen und einfach liegen lassen!!
-
Genau das wird dann aber nicht mehr garantiert und wie schon erwähnt ist
das dann etwas schief geht oder Müll im Speicher bleibt so wie Handels nicht
richtig gekickt werden mehr als nur Wahrscheinlich.Hält man sich nicht an die SLA's gibts keinen Schadensersatz!

Den großen roten Knopf in einer Fertigungshalle drückst Du ja auch nur
wenn dein Arme gerade in der 10t Presse hängt und nicht weil du eine rauchen
gehen willst oder Feierabend hast."Böse" Programme z.B. die sich auf Teufel komm raus gegen das schließen wehren
sind so ziemlich der einzigste Einsatzort den ich mir gerade vorstellen kann.
Wobei auch hier teils durch das "KILL" negative Komplikationen provoziert
werden können.Ich hab einmal ein "kill -n PID" (war es -n?) auf einen MySQL Server angewand!
Einmal... danach nie wieder. (UNIX Befehl für das sofortige terminieren eines Prozesses [hard kill])
-
berniesbutt schrieb:
ja aber neo hatte auch nicht so einen mächtigen verbündeten wie das betriebssystem, das immer so gut wie alles aufräumt, was wir dreckig machen und einfach liegen lassen!!
Und Du irrst. Bestimme Handles oder gesperrte Semaphoren oder Mutexe werden durch TerminateProcess nicht freigegeben. Wenn Du glück hast, killst Du nicht nur NEO, sondern die ganze Matrix...

-
Der Fragesteller hat seine Frage beantwortet bekommen. Jede weitere Diskussion ist damit überflüssig! Klar, man kriegt ein Programm auch beendet, indem man den Netzstecker zieht oder mit dem Hammer den Bildschirm zertrümmert. Bitte Schluss jetzt!
-
berniebutt schrieb:
Klar, man kriegt ein Programm auch beendet, indem man [...] mit dem Hammer den Bildschirm zertrümmert.
_dies_ wage ich zu bezweifeln!
