¿Cómo atrapo un Ctrl + C evento en C++?¿Cómo puedo atrapar un evento ctrl-c? (C++)
Respuesta
signal
no es la forma más fiable, 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;
}
Creo que my_handler debería tomar 'int s' como argumento. 'sig_t' es en sí mismo un tipo de puntero a función. –
Funciona en OSX. En mi archivo main.mm, ni siquiera necesité incluir signal.h, stdlib.h, o unistd.h. Acabo de incluir stdio.hy Foundation/Foundation.h, y luego, si necesitaba hacer std :: cout cosas para generar un mensaje de apagado, incluí iostream. – Volomike
tienes que coger el SIGINT signal (estamos hablando POSIX ¿verdad?)
Ver @Gab Royer's respuesta para sigaction.
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 que depende de la plataforma.
Si está escribiendo un programa de consola en POSIX, utilice la API de señal (#include signal.h >).
En una aplicación GUI WIN32 debe manejar el mensaje WM_KEYDOWN.
Para una aplicación de consola de Windows, que desea utilizar para manejar SetConsoleCtrlHandlerCTRL +C y CTRL +PAUSA.
Consulte here para ver un ejemplo.
- 1. Cómo atrapar el evento de minimizar ventana?
- 2. Cómo atrapar el evento del botón Atrás
- 3. Cómo atrapar el evento "History.Back" en javascript?
- 4. extensión de firefox. Cómo atrapar el evento onload?
- 5. Cómo atrapar el jQuery.event.trigger()?
- 6. cómo atrapar un int
- 7. ¿Qué evento atrapar para cerrar la aplicación?
- 8. ¿Cómo puedo pasar un evento a una función en C#?
- 9. ¿Cómo puedo generar un evento mediante reflejo en .NET/C#?
- 10. ¿Cómo atrapar Control-V en la aplicación C#?
- 11. ¿Por qué no puedo atrapar una excepción genérica en C#?
- 12. ¿Cómo puedo plantear un evento usando Moq?
- 13. Cómo atrapar una tecla presionada en un formulario de C# .NET
- 14. Cómo atrapar el evento táctil de un cuadro de diálogo cuando se hace clic fuera
- 15. ¿Cómo llamar un evento manualmente en C#?
- 16. Cómo atrapar trabajos de impresión en C# .NET
- 17. ¿Cómo puedo rastrear un evento usando Firebug?
- 18. cómo atrapar un evento de cambio de estado UNA VEZ con history.js?
- 19. ¿Hay alguna manera de atrapar un evento WillRotateToInterfaceOrientation desde un UIView?
- 20. ¿Cómo puedo probar un evento de un controlador MVC?
- 21. ¿Cómo atrapar un error/excepción en R?
- 22. ¿Puedo envolver un evento javascript en un evento jQuery?
- 23. C#: provoca un evento heredado
- 24. Cómo atrapar la excepción UrlFetchApp.fetch
- 25. ¿Cómo puedo cambiar un método asignado en un evento?
- 26. ¿Hay alguna manera de atrapar la finalización de un evento de carga de archivos de sonido?
- 27. ¿Cómo atrapar excepciones en Qt?
- 28. Levante un evento en C#
- 29. cómo atrapar "OpenCV error" en Python
- 30. jQuery: ¿Cómo puedo activar un evento cuando aparece un div?
¿Aplicación de consola, aplicación de Windows o qué? – GManNickG
Qué sistema operativo Windows, Linux, etc. – shf301
Bueno, es una aplicación Qt, pero la estoy ejecutando desde la consola durante el desarrollo. (Esto es Linux) – Scott