Konsolen Programm



  • Hallo,

    Gibt es einen Weg etwas zu tun, bevor der User die Konsole schliesst?

    Etwas ähnliches wie bei WinAPI die Message WM_QUIT...



  • Hmm. Da die Konsole auch "nur" ein Fenster ist, solltest du auch etwas mit WM_QUIT machen können. Ich kann dir jetzt gerade nicht sagen, wie du das am besten einbaust, aber ich denke, dass es prinzipiell gleich funktionieren sollte.



  • drakon schrieb:

    Hmm. Da die Konsole auch "nur" ein Fenster ist, solltest du auch etwas mit WM_QUIT machen können. Ich kann dir jetzt gerade nicht sagen, wie du das am besten einbaust, aber ich denke, dass es prinzipiell gleich funktionieren sollte.

    Nunja, ich erstelle das Fenster ja nicht...


  • Mod

    In manchen Fällen ja. Das genaue Verhalten hängt halt von der Konsole ab. Bash schickt den Subprozessen beispielsweise dass HUP (Hang Up) Signal, wenn sie beendet wird. Das kann man natürlich abfangen. Manche Konsolen machen aber auch einfach gar nichts und das Programm läuft einfach weiter.



  • Hi,

    Samyboy schrieb:

    Hallo,

    Gibt es einen Weg etwas zu tun, bevor der User die Konsole schliesst?

    Etwas ähnliches wie bei WinAPI die Message WM_QUIT...

    guckst du hier http://msdn.microsoft.com/en-us/library/ms682066(VS.85).aspx



  • Big Brother schrieb:

    Hi,

    Samyboy schrieb:

    Hallo,

    Gibt es einen Weg etwas zu tun, bevor der User die Konsole schliesst?

    Etwas ähnliches wie bei WinAPI die Message WM_QUIT...

    guckst du hier http://msdn.microsoft.com/en-us/library/ms682066(VS.85).aspx

    Dankeschön!

    Genau so etwas hab ich gesucht 😃

    Gibt es jedoch wirklich keinen anderen Weg? Denn so müsste ich in einer Endlosschleife auf das schliessen warten, doch ich möchte gerne einen cleanUp machen, sobald der User die Konsole schliesst, da ich ja schlecht auf sein schliessen warten und nix anderes tun oO 😋



  • Ich würd jetzt fast "Thread" sagen, womit es auch gehen würde, aber es wäre wahrscheinlich eine nicht grad schöne Lösung.



  • Hallo,

    Denn so müsste ich in einer Endlosschleife auf das schliessen warten,

    Nein, wo steht das denn da? Der Handler wird angesprungen, wenn das Ereignis ausgelöst wird, da muss man nicht warten.

    MfG,

    Probe-Nutzer



  • Verbessert mich, wenn ich falsch liege, aber der Handler wird doch von einem anderen Thread aus angesprungen. Deswegen ist darauf zu achten, dass sich da nichts in die Quere kommt. Die einfachste Lösung geht ungefähr so:

    bool g_closing = false;
    CRITICAL_SECTION g_closingCs;
    
    BOOL CtrlHandler( DWORD fdwCtrlType ) 
    {
    	//...
    	EnterCriticalSection(&g_closingCs);
    	g_closing = true;
    	LeaveCriticalSection(&g_closingCs);
    	//...
    }
    
    bool initConsoleHandler()
    {
    	InitializeCriticalSection(&g_closingCs);
    	return SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE );
    }
    
    bool isConsoleClosing()
    {
    	bool r_isClosing = false;
    	EnterCriticalSection(&g_closingCs);
    	r_isClosing = g_closing;
    	LeaveCriticalSection(&g_closingCs);
    	return r_isClosing;
    }
    


  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten