Partager via


Signaux CTRL+C et CTRL+ATTN

Les combinaisons de touches CTRL+C et CTRL+ATTN reçoivent un traitement spécial par les processus de console. Par défaut, quand une fenêtre de console a le focus clavier, la combinaison de touches CTRL+C ou CTRL+ATTN est traitée comme un signal (SIGINT ou SIGBREAK) et non comme une entrée de clavier. Par défaut, ces signaux sont passés à tous les processus de console qui sont attachés à la console. (Les processus détachés ne sont pas affectés. Consultez Création d’une console.) Le système crée un thread dans chaque processus client pour gérer l’événement. Le thread lève une exception si le processus est en cours de débogage. Le débogueur peut gérer l’exception ou continuer avec l’exception non gérée.

La combinaison de touches CTRL+ATTN est toujours traitée comme un signal, mais une application peut changer le comportement par défaut de CTRL+C de deux manières qui empêchent l’appel des fonctions du gestionnaire :

  • La fonction SetConsoleMode peut désactiver le mode d’entrée ENABLE_PROCESSED_INPUT pour la mémoire tampon d’entrée d’une console. Par conséquent, CTRL+C est signalé comme étant une entrée du clavier plutôt qu’un signal.
  • Quand SetConsoleCtrlHandler est appelé avec les valeurs NULL et TRUE pour ses paramètres, le processus appelant ignore les signaux CTRL+C. Le traitement normal de CTRL+C est restauré en appelant SetConsoleCtrlHandler avec les valeurs NULL et FALSE. Cet attribut permettant d’ignorer ou de ne pas ignorer les signaux CTRL+C est hérité par les processus enfants, mais il peut être activé ou désactivé par n’importe quel processus sans affecter les processus existants.

Pour plus d’informations sur la façon dont ces signaux sont traités, notamment les délais d’attente, consultez la documentation de rappel sur la routine des gestionnaires.