> ## 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.

# XUserGetSignOutDeferral

> XUserGetSignOutDeferral

# XUserGetSignOutDeferral

Récupère un handle vers le report de déconnexion. Cette API n'est pas prise en charge sur PC et retournera
E\_GAMEUSER\_DEFERRAL\_NOT\_AVAILABLE.

## Syntaxe

```cpp theme={null}
HRESULT XUserGetSignOutDeferral(  
         XUserSignOutDeferralHandle* deferral  
)  
```

### Paramètres

*deferral*   \_Out\_\
Type : XUserSignOutDeferralHandle\*

Contient un handle vers le report de déconnexion.

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

| Code de retour | Description |
| - | - |
| S\_OK | L'opération a réussi. |
| E\_GAMEUSER\_DEFERRAL\_NOT\_AVAILABLE | Impossible de fournir un report de déconnexion. |

## Remarques

<Note>Cette API n'est pas prise en charge sur PC si le jeu a une valeur configVersion de « 0 »</Note>
dans son fichier microsoftgame.config, et elle retournera E\_GAMEUSER\_DEFERRAL\_NOT\_AVAILABLE. À partir du
GDK de juin 2022, cette API est prise en charge sur PC si le fichier microsoftgame.config contient tous les éléments suivants :

* configVersion égal à 1
* Spécifie un ID de titre
* Spécifie un ID d'application MSA

Pour obtenir un report de déconnexion, appelez [XUserChangeEventCallback](/fr-CA/reference/system/xuser/functions/xuserchangeeventcallback) lorsque l'événement [XUserChangeEvent](/fr-CA/reference/system/xuser/enums/xuserchangeevent) est [XUserChangeEvent::SigningOut](/fr-CA/reference/system/xuser/enums/xuserchangeevent). Les reports peuvent ne pas être disponibles pendant un événement **SigningOut**. Une fois que vous avez obtenu un report, l'utilisateur reste connecté jusqu'à ce que tous les reports soient terminés ou qu'un délai d'expiration soit écoulé.

L'exemple suivant montre comment gérer les événements de modification d'utilisateur.

```cpp theme={null}
HRESULT RegisterForChanges()
{
    RETURN_HR_IF(E_UNEXPECTED, _token.token != 0);
    RETURN_IF_FAILED(XUserRegisterForChangeEvent(
        _queue,
        this,
        UserChangeEventHandler,
        &_token));
    return S_OK;
}

void UnregisterForChanges()
{
    XUserUnregisterForChangeEvent(_token, false);
    _token.token = 0;
}

void UserChangeEventHandler(
    XUserLocalId userLocalId,
    XUserChangeEvent event)
{
    auto iter = std::find_if(
        _users.begin(),
        _users.end(),
        [&userLocalId](const User& candidate)
    {
        XUserLocalId candidateUserLocalId;
        XUserGetLocalId(candidate.Handle(), &candidateUserLocalId);
        return candidateUserLocalId == userLocalId;
    });

    // User not known
    if (iter == _users.end())
    {
        return;
    }

    auto handle = iter->Handle();

    // If a guest gets signed out, immediately close the handle
    bool isGuest;
    if (SUCCEEDED_LOG(XUserGetIsGuest(handle, &isGuest)) &&
        isGuest &&
        event == XUserChangeEvent::SignedOut)
    {
        _users.erase(iter);
    }

    if (event == XUserChangeEvent::SigningOut)
    {
        // Delay the user signing out just for fun
        XUserSignOutDeferralHandle deferral;
        if (SUCCEEDED_LOG(XUserGetSignOutDeferral(&deferral)))
        {
            // Hold the deferral for 5 seconds then close it
            std::thread completeDeferralThread(
                [deferral]()
            {
                std::this_thread::sleep_for(std::chrono::milliseconds(5000));
                XUserCloseSignOutDeferralHandle(deferral);
            });

            completeDeferralThread.detach();
        }
    }

    if (event == XUserChangeEvent::GamerPicture)
    {
        iter->LoadGamerPicAsync(_queue);
    }
}
```

## Configuration requise

**En-tête :** XUser.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, Steam Deck, consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[XUser](/fr-CA/reference/system/xuser/xuser_members)

[XUserChangeEventCallback](/fr-CA/reference/system/xuser/functions/xuserchangeeventcallback)

[XUserChangeEvent](/fr-CA/reference/system/xuser/enums/xuserchangeevent)


## Related topics

- [XUserGetSignOutDeferral](/ja-jp/reference/system/xuser/functions/xusergetsignoutdeferral.md)
- [XUserCloseSignOutDeferralHandle](/reference/system/xuser/functions/xuserclosesignoutdeferralhandle.md)
