- È possibile gestire questo evento in qualche modo?
- Cosa succede in termini di stack di unwinding e deallocation di oggetti statici/globali?
risposta
MODIFICA: SIGINT, non SIGTERM. E Assaf riporta che nessun oggetto viene distrutto (almeno su Windows) per SIGINT non gestito.
Il sistema invia un SIGINT. Questo concetto si applica (con qualche variazione) per tutte le implementazioni di C. Per gestirlo, si chiama segnale, specificando un gestore di segnale. Vedere la documentazione sulla funzione di segnale su Open Group e MSDN.
La seconda domanda è un po 'più complicata e può dipendere dall'implementazione. La soluzione migliore è gestire il segnale, che consente di utilizzare manualmente delete
e exit()
.
Grazie. fyi, la pagina MSDN a cui ti sei collegato suggerisce che il sistema invia un SIGINT (e che NT verso l'alto non invia affatto SIGTERM). –
Grazie, Assaf. Corretto. –
Inoltre, SIGINT, che si traduce in un ExitProcess, non attiva la distruzione di alcun tipo di oggetto (globale, locale statico, automatico). Se, otoh, si traduce il sigint in exit(), globals/statics saranno destructor in ordine inverso di inizializzazione (ma non automatico). –
Ctrl-C nell'applicazione console genera un segnale. Il gestore predefinito di questo segnale chiama ExitProcess per terminare l'applicazione. È possibile ignorare questo comportamento impostando le proprie funzioni di gestione per il segnale utilizzando la funzione SetConsoleCtrlHandler.
+1 per rispondere effettivamente alla domanda! –
Che dire della deallocazione della statica? –
È possibile verificare se si verifica pila di svolgimento, con qualche semplice codice:
#include <iostream>
#include <windows.h>
using namespace std;
struct A {
~A() { cerr << "unwound" << endl; }
};
int main() {
A a;
while(1) {
Sleep(1000);
}
}
Sia che si verifica non dovrebbe essere a carico di attuazione, a seconda di come il runtime gestisce il Ctrl-C. Nella mia esperienza, non ha luogo.
Buona prova! Sono corretto. –
Ho difficoltà a credere in un test del genere, perché non sarò mai sicuro se il comportamento sarà diverso per le diverse configurazioni di progetto (ad esempio libs, dlls, native, managed, multi-threaded e loro combinazioni). Quindi preferirei avere la risposta "vera" e non fare affidamento su un test del genere. –
Non c'è una risposta "vera" - lo standard C++ non ha nulla da dire su questo argomento, quindi quello che ottieni sarà sempre dipendente dall'implementazione. –
- 1. C++ Win32 Console Colore
- 2. Disegno in una console Win32 su C++?
- 3. Colori in C++ console win32
- 4. Schermata di cancellazione della console Win32 C++ senza lampeggiare
- 5. Impossibile eseguire le applicazioni della console DNX
- 6. App Win32 Console vs CLR Console app
- 7. Problema console Win32
- 8. Metodi per distribuire applicazioni console in C#
- 9. Che cos'è esattamente una "Console"?
- 10. Qual è esattamente la funzione della proprietà Application.CutCopyMode in Excel
- 11. Visual Designer per applicazioni native Win32
- 12. Impostazione della posizione del cursore in un'applicazione console Win32
- 13. Programmazione della console interattiva per c/C++?
- 14. È possibile utilizzare Win32 Hooks nelle applicazioni Qt
- 15. Qual è esattamente l'ambito di Violazione di accesso '0xc0000005'?
- 16. Come eseguire i programmi della console figlio senza mostrare la finestra della console dal programma della GUI Win32?
- 17. Formattazione dell'output della console C++
- 18. Qual è l'effetto di __attribute__ ((__packed__)) sulle strutture annidate?
- 19. Object oriented C++ win32?
- 20. Qual è il modo consigliato per creare applicazioni C modulari?
- 21. Qual è esattamente la differenza tra @parallel e pmap?
- 22. Qual è la proprietà String.LegacyMode esattamente?
- 23. Maniglia CTRL + C su Win32
- 24. Qual è l'equivalente POSIX del Mutex di Win32?
- 25. Esistono librerie utili per le applicazioni della console .NET?
- 26. Tutorial per applicazioni Qt Console?
- 27. Che cosa è esattamente l'ascolto della porta
- 28. Nascondi la finestra della console nell'applicazione console C#
- 29. Double Buffering? Win32 C++
- 30. Utilizzo delle informazioni sulle applicazioni con più slot di implementazione
+1: Ottima domanda :) –
Eccellente handle :) –