> ## 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 d'avertir les applications de façon asynchrone. Pour ce faire, l'interface [IGameInput](/fr-CA/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 de sorte qu'un seul rappel s'exécute à 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` permet d'inscrire un maximum de 64 rappels, quel que soit leur type, à tout moment. 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-CA/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 servent à détecter la connexion et la déconnexion des appareils, mais d'autres changements d'état peuvent aussi 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 précis, de filtrer des changements d'état précis, de filtrer un appareil précis, ou toute combinaison de ces filtres. Par exemple, une application peut configurer un rappel pour être avertie lorsqu'un appareil s'est déconnecté du système.

En plus des changements d'état des appareils, la méthode [RegisterDeviceCallback](/fr-CA/reference/input/gameinput/interfaces/igameinput/methods/igameinput_registerdevicecallback) peut être utilisée pour l'énumération des appareils. Le paramètre `enumerationKind` accepte une valeur de l'énumération [GameInputEnumerationKind](/fr-CA/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 façon bloquante ou asynchrone. La combinaison de l'énumération des appareils et des changements d'état subséquents 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 averties 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 les événements peut être préférable. Par exemple, l'interface utilisateur du menu principal d'un jeu peut être mieux adaptée à une entrée basée sur les événements. Un autre exemple est une interface utilisateur de mappage des entrées qui doit attendre une entrée après avoir invité l'utilisateur à faire 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 précis des lectures du flux d'entrée. La méthode [RegisterReadingCallback](/fr-CA/reference/input/gameinput/interfaces/igameinput/methods/igameinput_registerreadingcallback) permet de filtrer les appareils qui produisent des types d'entrée précis ou de filtrer l'entrée d'un appareil précis, ou les deux.

Les applications peuvent aussi définir un filtre pour les valeurs d'entrée analogiques (comme les manettes de pouce d'une manette de jeu) qui exige un certain mouvement minimal avant que le rappel se déclenche. Cela peut réduire considérablement la fréquence des rappels lorsque les changements d'état analogiques à haute résolution ne sont pas nécessaires. Un bon exemple est l'implémentation d'une interface utilisateur de mappage des entrées qui attend un changement d'entrée après avoir invité l'utilisateur à faire 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 comprend à la fois les ressources utilisé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-CA/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 bloque jusqu'à la fin de l'exécution du rappel. Par conséquent, un rappel ne peut pas se désinscrire lui-même à partir de sa propre fonction de rappel.

Les rappels peuvent aussi être arrêtés en appelant la méthode [StopCallback](/fr-CA/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é à partir de 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 finir par être désinscrits, car seulement 64 rappels sont autorisés à tout moment.

<a id="seeAlsoSection" />

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

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

## Voir aussi

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

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

[Référence de l'API d'entrée](/fr-CA/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)
