Comment puis-je intercepter un événement Ctrl + C en C++?Comment puis-je attraper un événement ctrl-c? (C++)
Répondre
signal
n'est pas le moyen le plus fiable car il est différent dans les implémentations. Je recommanderais d'utiliser sigaction
. Le code de Tom ressemblerait maintenant à ceci:
#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;
}
Je pense que my_handler devrait prendre 'int s' comme argument. 'sig_t' est lui-même un type de pointeur de fonction. –
Fonctionne sur OSX. Dans mon fichier main.mm, je n'avais même pas besoin d'inclure signal.h, stdlib.h ou unistd.h. J'ai juste inclus stdio.h et Foundation/Foundation.h, et si j'avais besoin de faire des trucs std :: cout pour sortir un message d'arrêt, j'ai inclus iostream. – Volomike
Vous devez attraper le SIGINT signal (nous parlons Posix droit?)
Voir @Gab Royer's réponse pour sigaction.
Exemple:
#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;
}
Oui, c'est une question dépendante de la plateforme.
Si vous écrivez un programme de console sur POSIX, utilisez le signal API (#include <signal.h>).
Dans une application WIN32 GUI, vous devez gérer le message WM_KEYDOWN.
Pour une application console Windows, vous souhaitez utiliser SetConsoleCtrlHandler pour gérer CTRL +C et CTRL +PAUSE. Pour un exemple, voir here.
- 1. Attraper un événement Coller?
- 2. attraper un événement dans VBScript
- 3. Comment attraper un événement de collage contentEditable?
- 4. FLEX: Comment attraper un événement 'href'
- 5. (Android) Comment attraper un événement "anneau"?
- 6. attraper un événement de contrôle utilisateur
- 7. Attraper événement DTE en Javascript
- 8. Attraper un événement de fermeture du navigateur
- 9. Attraper un événement avec propagation arrêtée
- 10. Comment attraper événement touche pressée avec UIBinder
- 11. Comment attraper un événement à l'intérieur de uiscrollview sur l'image
- 12. attraper l'annuler événement pour [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
- 13. Attraper le bon événement avec le bon auditeur?
- 14. Excel événement autofill en C#
- 15. Attraper un courriel rebondi dans ASP.NET C#
- 16. Comment attraper un événement lorsque le contrôle est couvert par un autre contrôle?
- 17. Comment attraper une exception FtpWebResponse en C#
- 18. Comment implémenter un événement cancel en C#
- 19. Attraper plusieurs exceptions personnalisées? - C++
- 20. C++ natif WebBrowser timeout attraper
- 21. Comment attraper des données d'événement sur un événement click dans fullcalender en utilisant asp.net mvc
- 22. Comment faire pour attraper un événement LostFocus dans le code côté client?
- 23. Comment puis-je attraper un événement depuis le clavier sur une application Web pour iPhone?
- 24. Comment attraper un événement en appuyant sur le bouton de retour?
- 25. C#: Raising un événement hérité
- 26. C# faire un événement attendre
- 27. Élever un événement en C#
- 28. Comment connecter un événement à un événement dans VB.Net
- 29. Comment envoyer un événement "Ctrl + C" à un widget Qt?
- 30. Comment détecter un NumberDecimalSeparator dans un événement KeyDown (C#)
Application console, application Windows, ou quoi? – GManNickG
Quel OS Windows, Linux, etc. – shf301
Eh bien, c'est une application Qt, mais je l'exécute à partir de la console au cours du développement. (Ceci est Linux) – Scott