none
Fermeture application et fermeture de windows RRS feed

  • Question

  • Bonjour,

    J'ai une application document/vue (développée avec vc++) qui démarre dès le démarrage de l'ordinateur et qui éteint l'ordinateur lorsque j'appuie sur le bouton power (je travaille sous windows XP).

    Pour ce faire, j'intercepte le message WM_QUERYENDSESSION et je fais appel à la fonction ExitWindowsEx(EWX_SHUTDOWN...) dans la classe MainFrame.cpp.

    Tout fonctionne bien si ce n'est que l'application se ferme mal. En effet je libère certains objets ou je ferme des fichiers dans les destructeurs de mes différentes classes. Or windows se ferme avant que tous les destructeurs n'aient été appelés (j'ai logué des informations tout au long de mon application pour savoir ce qu'il se passe). 

    Comment faire pour que windows attende la fermeture complète de mon application avant d'éteindre le PC?

    Merci pour votre aide.


    lundi 19 novembre 2012 10:21

Réponses

  • Oui c'est plus clair !

    Le message WM_CLOSE n'est pas envoyé aux applications lors de la fermeture de Windows. Alors votre code de nettoyage ne sera pas appelé en cas de fermeture de Windows.

    Si vous voulez absolument effectuer un nettoyage à la fin de votre application, appelez vous-même le code qui effectue ce nettoyage à la fois sur WM_CLOSE et sur WM_QUERYENDSESSION.

    Note : Le code de nettoyage de l'application est souvent placé dans la fonction CWinApp::ExitInstance. Cette méthode est appelée lors de la fermeture de l'appli (après le WM_CLOSE). Je ne suis pas sûr que CWinApp::ExitInstance soit également appelé lors de la fermeture de Windows, mais vous pouvez peut-être vérifier...

    • Marqué comme réponse Aurel Bera mardi 27 novembre 2012 07:39
    mercredi 21 novembre 2012 18:28
    Auteur de réponse
  • dwwin.exe, c'est DrWatson.

    C'est un programme en charge de faire les dump mémoire en cas de crash d'un programme, si le système est configuré pour.

    Avez-vous des informations complémentaires dans l'eventViewer, comme le nom du programme qui a planté ?

    Si c'est le votre, c'est qu'il vous reste un bug ;-).

    C'est peut-être rejouable avec un simple envoi de WM_QUERYENDSESSION sur la fenêtre de votre application avec Spy++, par exemple.


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse berengere_b mardi 18 décembre 2012 15:34
    mercredi 5 décembre 2012 12:48
    Modérateur

Toutes les réponses