> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rappels GameInput

> Rappels GameInput

<a id="introductionSection" />

Bien que `GameInput` soit principalement conçu autour d'un modèle d'interrogation (polling), il existe des cas où il est préférable de notifier les applications de manière asynchrone. Pour cela, l'interface [IGameInput](/fr/reference/input/gameinput/interfaces/igameinput/igameinput) expose quelques méthodes permettant d'inscrire des fonctions de rappel qui sont appelées lorsque certains événements d'intérêt se produisent.

En interne, `GameInput` sérialise la distribution des rappels afin qu'un seul rappel soit exécuté à la fois. `GameInput` garantit que les rappels sont distribués dans l'ordre chronologique. Ces garanties simplifient le code qu'une application doit écrire dans ses fonctions de rappel.

`GameInput` autorise l'inscription d'un maximum de 64 rappels à un moment donné, quel que soit leur type. Les rappels sont distribués à partir d'un thread de travail interne de `GameInput`. Pour plus d'informations sur ce fonctionnement, ainsi que sur les options permettant de planifier manuellement ce travail, consultez [Files d'attente de travail GameInput](/fr/build/core-features/common/input/advanced/input-work-queues).

<a id="deviceCallbacksSection" />

## Rappels d'appareil

Les rappels d'appareil permettent aux applications de savoir quand l'état des périphériques d'entrée change, comme le montre la syntaxe suivante. Le plus souvent, ils sont utilisés pour détecter la connexion et la déconnexion des appareils, mais d'autres changements d'état peuvent également présenter un intérêt.

```c++ theme={null}
HRESULT RegisterDeviceCallback(
    _In_opt_ IGameInputDevice * device,
    _In_ GameInputKind inputKind,
    _In_ GameInputDeviceStatus statusFilter,
    _In_ GameInputEnumerationKind enumerationKind,
    _In_opt_ void * context,
    _In_ GameInputDeviceCallback callbackFunc,
    _Out_opt_ _Result_zeroonfailure_ GameInputCallbackToken * callbackToken);
```

Les rappels d'appareil peuvent être inscrits avec plusieurs filtres facultatifs. Il est notamment possible de filtrer les appareils qui produisent des types d'entrée spécifiques, de filtrer des changements d'état spécifiques, de filtrer un appareil spécifique, ou toute combinaison de ces filtres. Par exemple, une application peut configurer un rappel pour être notifiée lorsqu'un appareil s'est déconnecté du système.

Outre les changements d'état des appareils, la méthode [RegisterDeviceCallback](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_registerdevicecallback) peut être utilisée pour l'énumération des appareils. Le paramètre `enumerationKind` prend une valeur de l'énumération [GameInputEnumerationKind](/fr/reference/input/gameinput/enums/gameinputenumerationkind), qui indique si l'énumération doit être effectuée dans le cadre de l'inscription du rappel et, le cas échéant, si elle doit être effectuée de manière bloquante ou asynchrone. Combiner l'énumération des appareils et les changements d'état ultérieurs en une seule opération atomique évite les conditions de concurrence dont souffrent involontairement de nombreuses applications dans leur code d'entrée.

<a id="readingCallbacksSection" />

## Rappels de lecture

Grâce aux rappels de lecture, les applications peuvent être notifiées chaque fois que de nouvelles lectures arrivent dans le flux d'entrée, comme le montre la syntaxe suivante. Bien que de nombreuses applications trouveront préférable d'interroger les entrées, il existe des situations où une entrée basée sur des événements peut être plus appropriée. Par exemple, l'interface utilisateur du menu principal d'un jeu peut être mieux adaptée à une entrée basée sur des événements. Un autre exemple est une interface de mappage des entrées qui doit attendre une entrée après avoir invité l'utilisateur à effectuer sa sélection.

```c++ theme={null}
HRESULT RegisterReadingCallback(
    _In_opt_ IGameInputDevice * device,
    _In_ GameInputKind inputKind,
    _In_ float analogThreshold,
    _In_opt_ void * context,
    _In_ GameInputReadingCallback callbackFunc,
    _Out_opt_ _Result_zeroonfailure_ GameInputCallbackToken * callbackToken);
```

Comme les rappels d'appareil, les rappels de lecture peuvent être inscrits avec plusieurs filtres facultatifs. C'est particulièrement utile pour les rappels de lecture, car les applications peuvent s'intéresser à un sous-ensemble spécifique de lectures du flux d'entrée. La méthode [RegisterReadingCallback](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_registerreadingcallback) permet de filtrer les appareils qui produisent des types d'entrée spécifiques et/ou les entrées d'un appareil spécifique.

Les applications peuvent également spécifier un filtre pour les valeurs d'entrée analogiques (comme les sticks d'une manette) qui exige un mouvement minimal avant le déclenchement du rappel. Cela peut réduire considérablement la fréquence des rappels lorsque des changements d'état analogiques haute résolution ne sont pas nécessaires. Un bon exemple est l'implémentation d'une interface de mappage des entrées qui attend un changement d'entrée après avoir invité l'utilisateur à effectuer sa sélection.

<a id="unregisteringSection" />

## Désinscription des rappels

Une fois qu'un rappel a été inscrit avec succès, l'application doit garantir que toutes les ressources nécessaires à l'exécution du rappel restent valides. Cela inclut à la fois les ressources consommées par le code du rappel et la fonction de rappel elle-même, par exemple si la fonction de rappel est hébergée dans une DLL que l'application charge et décharge à la demande.

Pour récupérer ces ressources en toute sécurité, une application doit d'abord désinscrire le rappel en passant le jeton reçu de la méthode `Register*Callback` à la méthode [UnregisterCallback](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_unregistercallback). Si le rappel est en cours d'exécution lorsque cette méthode est appelée, celle-ci est bloquée jusqu'à la fin de l'exécution du rappel. Par conséquent, un rappel ne peut pas se désinscrire lui-même depuis sa propre fonction de rappel.

Les rappels peuvent également être arrêtés en appelant la méthode [StopCallback](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_stopcallback). Celle-ci ne désinscrit pas le rappel, mais garantit qu'il ne sera plus appelé. Comme le rappel n'est pas désinscrit, cette méthode peut être appelée en toute sécurité depuis la propre fonction de rappel d'un rappel. Elle termine l'exécution du rappel en cours, mais ne l'appelle plus. Les rappels doivent finalement être désinscrits, car seuls 64 rappels sont autorisés à un moment donné.

<a id="seeAlsoSection" />

## Documentation de référence de l'API

* [GameInput (contenu de l'API)](/fr/reference/input/gameinput/gameinput_members)

## Voir aussi

[Notions fondamentales de GameInput](/fr/build/core-features/common/input/overviews/input-fundamentals)

[Rubriques avancées sur GameInput](/fr/build/core-features/common/input/advanced/input-advanced-topics)

[Référence de l'API d'entrée](/fr/reference/input/gc-reference-input-toc)


## Related topics

- [GameInput](/reference/input/gameinput/gameinput_members.md)
- [Overview of GameInput](/build/core-features/common/input/overviews/input-overview.md)
- [GameInput fundamentals](/build/core-features/common/input/overviews/input-fundamentals.md)
- [GameInput 概述](/zh-CN/build/core-features/common/input/overviews/input-overview.md)
- [GameInput 개요](/ko/build/core-features/common/input/overviews/input-overview.md)
