programm killn
-
Ich beende ein Programm mit PostMessage() und WM_QUIT. Kann ich dannach gleich TerminateProcess() benutzen oder würde PostMessage() dadurch seine Bedeutung verlieren?
-
warum nicht gleich TerminateProcess() ?
-
bronX schrieb:
warum nicht gleich TerminateProcess() ?
Informier dich mal über die Nachteile..
-
Ich denke es ist schon "problematisch". PostMessage sendet die Nachricht ohne auf Rückmeldung zu warten. Mit anderen Worten du wirst den Prozess unkontrolliert abschiessen, je nach Timing-Verhalten.
-
Die "freundliche" Aufforderung an ein Programm, sich zu beenden ist WM_CLOSE. D.h. ein
PostMessage(hwnd, WM_CLOSE, 0, 0);dürfte wohl noch am besten sein um ein anderes Programm zu beenden. Zur Not kann man es dann immer noch mit TerminateProcess abschiessen. Problematischer finde ich das Versenden von WM_QUIT. Das sollte man wirklich nicht tun, da das Programm weder das Fenster schließen, noch evt. Ressourcen freigeben kann.
-
player4245 schrieb:
Die "freundliche" Aufforderung an ein Programm, sich zu beenden ist WM_CLOSE.
Dies ist ein Verbesserungsvorschlag, danke, beantwortet aber nicht meine Frage.
-
Na gut dann hier die Antwort: du kannst es natürlich benutzen, jedoch würde dir das PostMessage dann überhaupt nichts bringen. Also musst du dich entscheiden, entweder PostMessage mit WM_CLOSE oder wenn das Programm möglicherweise hängt TerminateProcess, aber besser auch nur dann.
-
Ich will ja beides benutzen. Erst mit PostMessage() und wenn das Programm hängt nochmal TerminateProcess() hinterher. Wenn ich nun zwichen beiden ein Sleep() reintue geht es zwar, gefält mir aber nicht besonders, da mein ganzes Programm dann für diese Zeit hängenbleibt. Kann ich irgendwie überprüfen, ob das Programm am beenden ist und falls nicht dann TerminateProcess()?
-
Das kommt darauf an was dein Programm machen soll. Wenn es wirklich wichtig ist das sich das Programm beendet, dann könntest du TerminateProcess nehmen. Wenn das eher so eine Nebenläufigkeit ist, dann solltest du meine Lösung benutzen.
-
Dann rufe DestroyWindow(hwnd) auf und das Programm ist weg! Vielleicht bleiben noch einige vom Programm beanspruchte Dinge, die du vorher aufräumen musst.
-
postmessage schrieb:
Ich will ja beides benutzen. Erst mit PostMessage() und wenn das Programm hängt nochmal TerminateProcess() hinterher.
Versuche lieber statt eines geschickten Prozess Abschießens deine Reaktion auf WM_CLOSE/WM_QUIT ordentlich zu machen. Wenn dein Programm nach WM_CLOSE hängt ist es ein Bug den du beheben solltest, TerminateProcess ist nur ein Hack der das Problem nicht löst und dir irgendwann Schwierigkeiten macht.