signal
Gestion de signal d'interruption de jeux.
Important
N'utilisez pas cette méthode pour arrêter une application d' Windows Store, sauf dans le test ou les scénarios de débogage.Les méthodes de programmation ou de l'interface utilisateur de fermer une application d' Windows Store ne sont pas autorisées selon la section 3,6 de Windows 8 spécifications de certification d'application.Pour plus d'informations, consultez Cycle de vie de l'application (les fenêtres stockent des applications).
void (__cdecl *signal(
int sig,
void (__cdecl *func ) (int [, int ] )))
(int);
Paramètres
sig
Signalez la valeur.func
Fonctionnent à exécuter.Le premier paramètre est une valeur de signal et le deuxième paramètre est un Sub- code qui peut être utilisé lorsque le premier paramètre est SIGFPE.
Valeur de retour
signal retourne la valeur précédente d' func associée à le signal donné.Par exemple, si la valeur précédente d' func a été SIG_IGN, la valeur de retour est également SIG_IGN.Une valeur de retour d' SIG_ERR indique une erreur, dans ce cas errno a la valeur EINVAL.
Consultez _doserrno, errno, _sys_errlist, et _sys_nerr pour plus d'informations sur cette opération, ainsi que d'autres, les codes de retour.
Notes
La fonction d' signal permet à un processus pour choisir l'une des nombreuses manières de gérer un signal d'interruption du système d'exploitation.L'argument d' sig est l'interruption de laquelle signal répond ; il doit être l'une des constantes manifestes suivantes, défini dans. SIGNAL.H.
Valeur de sig |
Description |
---|---|
SIGABRT |
Un arrêt anormal |
SIGFPE |
Erreur à virgule flottante |
SIGILL |
Instruction non conforme |
SIGINT |
Signal de CTRL+C |
SIGSEGV |
Accès non conforme de mémoire |
SIGTERM |
Demande d'arrêt |
Si sig n'est pas l'une des valeurs ci-dessus, le gestionnaire de paramètre non valide est appelé, comme défini dans Validation des paramètres .Si est autorisé à l'exécution pour continuer, définit errno de cette fonction à EINVAL et retourne SIG_ERR.
Par défaut, signal termine le programme appelant avec un code de sortie 3, indépendamment de la valeur d' sig.
[!REMARQUE]
SIGINT n'est pris en charge pour les applications Win32.Lorsqu'une interruption de CTRL+C se produit, les systèmes d'exploitation Win32 génèrent un nouveau thread pour gérer spécifiquement cette interruption.Cela peut provoquer une application à un seul thread telle qu'une dans UNIX de devenir multithread, ce qui provoque un comportement inattendu.
L'argument d' func est une adresse à un gestionnaire de signal qui vous écriture, ou l'une des constantes prédéfinies SIG_DFL ou SIG_IGN, également défini dans. SIGNAL.H.Si func est une fonction, elle est installée comme le gestionnaire de signal pour le signal donné.Le prototype du gestionnaire de signal requiert un argument formel, sig, de type int.Le système d'exploitation fournit l'argument réel via sig lorsqu'une interruption se produit ; l'argument est un signal qui a généré l'interruption.Vous pouvez utiliser les six constantes manifestes (répertoriées dans le tableau précédent) à l'intérieur de votre gestionnaire de signal pour déterminer qui s'interrompent produit et prennent une action appropriée.Par exemple, vous pouvez appeler signal deux fois pour affecter le même gestionnaire à deux signaux différents, puis tester l'argument d' sig dans le gestionnaire pour prendre des mesures différentes selon le signal reçu.
Si vous testez des exceptions de virgule flottante (SIGFPE), les points d' func à une fonction qui prend un deuxième argument facultatif qui est l'une des nombreuses constantes manifestes défini dans FLOAT.H du formulaire FPE_xxx.Lorsqu'un signal d' SIGFPE se produit, vous pouvez tester la valeur du deuxième argument pour déterminer le type d'exceptions de virgule flottante puis pour prendre une action appropriée.Cet argument et ses valeurs possibles sont les extensions Microsoft.
Pour les exceptions de virgule flottante, la valeur d' func n'est pas réinitialisation de la réception du signal.Pour récupérer des exceptions de virgule flottante, essayez d'utiliser/sauf les clauses entourant les opérations en virgule flottante.Il est également possible de récupérer à setjmp avec longjmp.Dans les deux cas, le processus appelant continue l'exécution avec l'état à virgule flottante de la gauche de processus non définie.
Si le gestionnaire de signal retourne, le processus appelant continue l'exécution immédiatement après le point auquel elle a reçu le signal d'interruption.Cela est vrai quel que soit le type de signal ou en mode opératoire.
Avant que la fonction spécifiée est exécutée, la valeur d' func a la valeur SIG_DFL.Le prochain signal d'interruption est traité comme décrit dans SIG_DFL, à moins qu'un appel intervenant à signal spécifie sinon.Cette fonctionnalité vous permet aux aides de redémarrage dans la fonction appelée.
Étant donné que les routines de signal- gestionnaire sont généralement appelés de façon asynchrone lorsqu'une interruption se produit, la fonction de signal- gestionnaire peut obtenir le contrôle lorsqu'une opération à l'exécution est incomplète et dans un état inconnu.La liste suivante résume les restrictions qui déterminent les fonctions que vous pouvez utiliser dans votre routine de signal- gestionnaire.
Ne publiez pas les routines de bas niveau ou d'E/S de STDIO.H (par exemple printf et fread).
N'appelez les routines du tas ou aucun routine qui utilise les routines du tas (par exemple malloc, _strdup, et _putenv).Consultez l' malloc pour plus d'informations.
N'utilisez pas de fonction qui génère un appel système (par exemple, _getcwd, time).
N'utilisez pas longjmp à moins que l'interruption soit provoquée par une exception à virgule flottante (c. autrement dit., sig est SIGFPE).Dans ce cas, réinitialisez d'abord le package à virgule flottante avec un appel à _fpreset.
N'utilisez aucun routine de superposition.
Un programme doit contenir le code à virgule flottante s'il est d'intercepter l'exception d' SIGFPE avec la fonction.Si votre programme n'a pas le code à virgule flottante et ne requiert pas le code de la signal- gestion de la bibliothèque Runtime, déclarez simplement un double volatile et initialisez- le à zéro :
volatile double d = 0.0f;
Signale d' SIGILL et d' SIGTERM ne sont pas générés sous windows.Ils sont inclus pour la compatibilité ANSI.Vous pouvez définir des gestionnaires de signal pour ces signaux avec signal, et vous pouvez également explicitement générer ces signaux en appelant augmenter.
Les paramètres de signal ne sont pas conservées dans des processus engendrés créés par des appels à _exec ou _spawn s'exécute.Les paramètres de signal sont réinitialisées à la valeur par défaut du nouveau processus.
Configuration requise
Routine |
En-tête requis |
---|---|
signal |
<signal.h> |
Pour des informations de compatibilité supplémentaires, consultez l' Compatibilité dans l'introduction.
Exemple
L'exemple suivant illustre l'utilisation d' signal d'ajouter un comportement personnalisé dans le signal d' SIGABRT .Pour plus d'informations sur le comportement d'arrêt, consultez _set_abort_behavior.
// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>
void SignalHandler(int signal)
{
printf("Application aborting...\n");
}
int main()
{
typedef void (*SignalHandlerPointer)(int);
SignalHandlerPointer previousHandler;
previousHandler = signal(SIGABRT, SignalHandler);
abort();
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' Exemples d'appel de code non managé.