Dans l’application Windows, vous pouvez appuyer sur ctrl+c
en utilisant:
#include #include void SigInt_Handler(int n_signal) { printf("interrupted\n"); } int main(int n_arg_num, const char **p_arg_list) { signal(SIGINT, &SigInt_Handler); getchar(); // wait for user intervention }
Cela fonctionne bien, sauf que cela ne fonctionne pas du tout si l’utilisateur appuie sur la croix ×
qui ferme la fenêtre de la console. Y a-t-il un signal pour ça?
La raison pour laquelle j’ai besoin de ça, c’est que j’ai cette application CUDA qui a tendance à faire planter l’ordinateur si elle est fermée pendant le calcul. Le code est une sorte de multiplateforme, je préférerais donc utiliser des signaux plutôt que SetConsoleCtrlHandler
. Y a-t-il un moyen?
Le bon est SIGBREAK
, vous pouvez l’essayer avec:
#include #include void SigInt_Handler(int n_signal) { printf("interrupted\n"); exit(1); } void SigBreak_Handler(int n_signal) { printf("closed\n"); exit(2); } int main(int n_arg_num, const char **p_arg_list) { signal(SIGINT, &SigInt_Handler); signal(SIGBREAK, &SigBreak_Handler); getchar(); // wait for user intervention return 0; }
À la fermeture de la fenêtre de la console, le programme affichera "closed"
et renverra 2.