Cosa succede quando si chiude un’applicazione console c++

Credo che la domanda dice tutto, ma, cosa succede se qualcuno chiude un c++ console app? Come in, clic sulla “x” nell’angolo in alto. Non chiudere immediatamente? Non gettare una sorta di eccezione? È un comportamento indefinito?

  • Piattaforma che ti interessano? Windows? Linux? Che colpisce davvero la risposta.
  • L’uso della frase “applicazione console” implica windows, dato che MS terminologia per la modalità carattere apps.
InformationsquelleAutor rlbond | 2009-03-30

 

4 Replies
  1. 20

    Chiusura di un c++ console app con la “x” nell’angolo in alto genera un’ CTRL_CLOSE_EVENT che si può prendere se si imposta un gestore di controllo utilizzando il SetConsoleCtrlHandler funzione. Lì si poteva ignorare la stretta funzionalità e di eseguire tutto quello che desiderava fare, e quindi opzionalmente ancora eseguire il comportamento predefinito.

    • Non è possibile sostituire la chiusura della console. Il processo si chiude se si torna TRUE o FALSE. Se si delay o di ritorno, ad esempio, per fare pulizia, si è dato 5 secondi prima che il processo è ucciso. E ‘ lo stesso anche se manualmente chiamato AllocConsole o AttachConsole, ed è troppo tardi per chiamare FreeConsole del gestore. Se l’utente chiudere la console non dovrebbe terminare il processo principale, quindi è necessario utilizzare un processo figlio per la console e collegare standard di I/O con i tubi.
  2. 9

    Su Linux e altri sistemi Unix, la console viene eseguito come un processo separato. Come si chiude la shell, esso invia un segnale SIGHUP al momento attivo del processo o dei processi che non vengono eseguite in background. Se il programmatore non viene gestito, il processo termina. Lo stesso segnale viene inviato se si chiude la sessione SSH con un terminale e un processo attivo.

  3. 8

    SIGBREAK rialzato su Windows.

    • Questo non fornisce una risposta alla domanda. Per una critica o richiesta di chiarimento da parte di un autore, lasciare un commento sotto il post.
    • Sicuro che non. È la risposta che volevo quando ho trovato questa pagina.
    • SIGBREAK è aumentato solo se si utilizza il runtime di C. Windows non hanno Unix segnali. Il runtime C è una console di controllo del gestore mappe CTRL_C_EVENT per SIGINT e tutti gli altri eventi del controllo SIGBREAK.
    • Un buon punto. Ma se è sono utilizzando il runtime C, quindi l’elaborazione SIGBREAK con tutorialspoint.com/cplusplus/cpp_signal_handling.htm è un modo pulito di fare con un manuale chiusura finestra.
    • se stiamo usando altre implementazioni di C/C++, essi non possono implementare SIGBREAK (non C standard) o mappa CTRL_CLOSE_EVENT a un segnale. Probabilmente MinGW g++ è perché ruba il privato C runtime di Windows (msvcrt.dll). Non ho indagato a fondo come le applicazioni POSIX (Cygwin, MSYS) a realizzare questo quando si esegue da una console (a differenza di un emulatore di terminale), ma quando chiudo la console di un MSYS processo bash, esce immediatamente con lo stato STATUS_CONTROL_C_EXIT (0xC000013A), che suggerisce l’impostazione predefinita di controllo del gestore viene chiamato.

Lascia un commento