Pregunta

¿Cómo puedo detectar un evento Ctrl + C en C ++?

¿Fue útil?

Solución

signal no es la forma más confiable ya que difiere en las implementaciones. Yo recomendaría usar sigaction. El código de Tom ahora se vería así:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void my_handler(int s){
           printf("Caught signal %d\n",s);
           exit(1); 

}

int main(int argc,char** argv)
{

   struct sigaction sigIntHandler;

   sigIntHandler.sa_handler = my_handler;
   sigemptyset(&sigIntHandler.sa_mask);
   sigIntHandler.sa_flags = 0;

   sigaction(SIGINT, &sigIntHandler, NULL);

   pause();

   return 0;    
}

Otros consejos

Para una aplicación de consola de Windows, desea utilizar SetConsoleCtrlHandler para manejar CTRL + C y CTRL + BREAK .

Vea aquí para un ejemplo.

Tienes que atrapar la señal SIGINT (estamos hablando de POSIX ¿verdad?)

Ver @Gab Royer & # 180; respuesta de s para seguirction.

Ejemplo:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

void my_handler(sig_t s){
           printf("Caught signal %d\n",s);
           exit(1); 

}

int main(int argc,char** argv)
{
   signal (SIGINT,my_handler);

   while(1);
   return 0;

}

Sí, esta es una pregunta dependiente de la plataforma.

Si está escribiendo un programa de consola en POSIX, use la API de señal (#include < signal.h >).

En una aplicación WIN32 GUI debe manejar el mensaje WM_KEYDOWN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top