none
Windows herunterfahren - wann? RRS feed

  • Frage

  • hier besteht das problem, daß mit beendigung meiner anwendung ggf. das gesamte windows-system heruntergefahren werden soll.

    dazu gab es bisher folgenden ansatz:

    void CMainFrame::OnClose() { //Aufräumarbeiten, Speichern usw. CMDIFrameWnd::OnClose(); if ( m_bShutdownWindows ) { // Rechner runterfahren per ::ExitWindowsEx

    }

    Das Problem hier ist nun folgendes: Durch den Aufruf von  CMDIFrameWnd::OnClose wird auch des destructor von CMainFrame aufgerufen, wodurch ein Zugriff auf  m_bShutdownWindows danach nicht mehr funktioniert.

    Geht es denn andersrum? Zuerst  ::ExitWindowsEx aufrufen und dann den destrucor per  CMDIFrameWnd::OnClose()? Wieviel zeit "hat man denn noch", nachdem  ::ExitWindowsEx aufgerufen wurde? Die Aufräumarbeiten können ja auch einen moment dauern.

    oder ist der ansatz so grundsätzlich falsch? wie gehts dann besser?

    gruß und dank

    micha

    Dienstag, 28. Mai 2013 09:39

Antworten

  • bool bShutdownWindows =m_bShutdownWindows;

    CMDIFrameWnd::OnClose();

    if( bShutdownWindows ) ::ExitWindowsEx();

    würde so nicht funktionieren?

    MfG,

    KS


    Konrad Schiemert

    • Als Antwort markiert suriel6666 Dienstag, 28. Mai 2013 11:13
    Dienstag, 28. Mai 2013 10:25
  • >> bool bShutdownWindows =m_bShutdownWindows;

    >>würde so nicht funktionieren?

    kann sein, daß das so funktioniert, aber man darf nicht vergessen: nach CMDIFrameWnd::OnClose(); wure bereits der dtor der eigenen klasse aufgerufen, also ist es vermutlich (die experten mögen mich korrigieren) keine so gute idee, dahinter überhaupt noch IRGENDETWAS innerhalb der klasse zu tun

    • Als Antwort markiert suriel6666 Dienstag, 28. Mai 2013 11:12
    Dienstag, 28. Mai 2013 10:29

Alle Antworten

  • bool bShutdownWindows =m_bShutdownWindows;

    CMDIFrameWnd::OnClose();

    if( bShutdownWindows ) ::ExitWindowsEx();

    würde so nicht funktionieren?

    MfG,

    KS


    Konrad Schiemert

    • Als Antwort markiert suriel6666 Dienstag, 28. Mai 2013 11:13
    Dienstag, 28. Mai 2013 10:25
  • >> bool bShutdownWindows =m_bShutdownWindows;

    >>würde so nicht funktionieren?

    kann sein, daß das so funktioniert, aber man darf nicht vergessen: nach CMDIFrameWnd::OnClose(); wure bereits der dtor der eigenen klasse aufgerufen, also ist es vermutlich (die experten mögen mich korrigieren) keine so gute idee, dahinter überhaupt noch IRGENDETWAS innerhalb der klasse zu tun

    • Als Antwort markiert suriel6666 Dienstag, 28. Mai 2013 11:12
    Dienstag, 28. Mai 2013 10:29
  • ... und warum ist das ein Problem?

    Solange Du nichts mit dem this Zeiger machst, kannst Du Code ausführen solange Du willst.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Dienstag, 28. Mai 2013 10:59
    Moderator
  • > Solange Du nichts mit dem this Zeiger machst, kannst Du Code ausführen solange Du willst.

    alles klar, dann funktioniert konrads vorschlag also. dank euch beiden

    Dienstag, 28. Mai 2013 11:13
  • ... und warum ist das ein Problem?

    Solange Du nichts mit dem this Zeiger machst, kannst Du Code ausführen solange Du willst.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    :-) die sind alle durch die Objekt-Orientiertheit verdorben...

    OO = prozedurales Programmieren mit implizitem this-Parameter ... wobei, das darf man glaub ich nicht zu laut sagen, einige hören das gar nicht gerne und Java-Jünger glauben gleich an den Weltuntergang :D

    Dienstag, 28. Mai 2013 20:22