Domanda

  1. E 'possibile gestire questo evento in qualche modo?
  2. Che cosa accade in termini di stack di svolgimento e deallocazione di oggetti statici / globali?
È stato utile?

Soluzione

EDIT: SIGINT, non SIGTERM. E Assaf riferisce che non vi siano oggetti distrutti (almeno su Windows) per SIGINT unhanded.

Il sistema invia un SIGINT. Questo concetto si applica (con qualche variazione) per tutte le implementazioni C. Per gestire la cosa, si chiama il segnale, specificando un gestore di segnale. Vedere la documentazione sulla funzione segnale a Open Il gruppo e MSDN .

La seconda domanda è un po 'più complicato, e può dipendere attuazione. La cosa migliore è quella di gestire il segnale, che permette di utilizzare delete e exit() manualmente.

Altri suggerimenti

Ctrl-C in un'applicazione console genererà 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 funzione SetConsoleCtrlHandler .

È 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);
    }
}

Se 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top