Applikation sauber beenden



  • Hi,

    wenn meine Applikation beendet wird gehe ich derzeit so vor, dass ich das Hauptfenster schließe und dann im Hintergrund noch ein paar Daten speichere, die während einer Session aufgelaufen sind.

    Wenn jetzt aber jemand die Applikation offen lässt und Windows herunterfährt, kommt die Meldung "Applikation reagiert nicht" mit der man die Software dann auch abschießen kann.

    Wie kann ich das umgehen dass Windows meine Applikation abschießen will nur weil sie noch was zu tun hat? Muss ich irgend welche Alive/Shutdownmessages bearbeiten um dem Systemn zu sagen dass die Applikation lebt und nur noch was zu tun hat?

    Elmey



  • Eigentlich sendet Windows Deinem Programm unter anderem eine Nachricht (WM_CLOSE, WM_DESOTRY, etc) wenn es beendet werden soll, darauf solltest Du auch mit dem Beenden des Programms reagieren. Des weiteren bekommt Dein Programm die Nachricht WM_QUERYENDSESSION bzw. WM_ENDSESSION. Für weitere Infos siehe MSDN.



  • So weit die Theorie. nur: Ich habe eine MDI-Applikation, bei der ich WM_ENDSESSION in der Hauptapplikation abfange. Dummerweise schießt mir Windows mein Document und meinen View schon mit einer anderen Message ab, so dass es dann einiges an Verwirrung gibt und ich momentan keine Idee habe, welche Messages diese beiden Objekte empfangen.

    Elmey



  • WM_CLOSE vermutlich. WM_DESTROY wirds eher nicht sein -- das wäre viel zu grob, das würden viele viele Programme nichtmehr verdauen.

    Einfach mal ein paar Kandidaten (messages) rauspicken, und mitloggen (File).



  • Und wer sollte diese Message erhalten? View und Document sind es jedenfalls nicht.


  • Mod

    Du hast nicht unbegrenzt Zeit. Das gilt auch für Services. Wenn die Applikation das WM_ENDSESSION bekommen hat muss alles schon relative Fix gehen.

    IMHO hast Du 5 Sekunden nach WM_ENDSESSION.
    Das ist auch dokumentiert. Unter Vista hast ist alles noch schärfer geworden.:
    http://msdn2.microsoft.com/en-us/library/ms700677.aspx



  • Elmey schrieb:

    Und wer sollte diese Message erhalten? View und Document sind es jedenfalls nicht.

    3x darfst du raten. Ich rate bloss 1x, mein tip: das top-level Window (wird denke ich "CMainFrame" oder so heissen *schauder* MFC *schauder*).


Log in to reply