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

# XGameSaveSubmitUpdate

> XGameSaveSubmitUpdate

# XGameSaveSubmitUpdate

Envia uma atualização para o serviço XGameSave. Atualiza blobs dentro de um contêiner.

## Sintaxe

```cpp theme={null}
HRESULT XGameSaveSubmitUpdate(  
         XGameSaveUpdateHandle updateContext  
)  
```

### Parâmetros

*updateContext*   \_In\_\
Tipo: XGameSaveUpdateHandle

Um identificador para o XGameSaveUpdate a ser atualizado.

### Valor retornado

Tipo: HRESULT

Resultado da função.

Erros comuns

* E\_GS\_INVALID\_CONTAINER\_NAME
* E\_GS\_OUT\_OF\_LOCAL\_STORAGE
* E\_GS\_UPDATE\_TOO\_BIG
* E\_GS\_QUOTA\_EXCEEDED
* E\_GS\_CONTAINER\_NOT\_IN\_SYNC
* E\_GS\_CONTAINER\_SYNC\_FAILED
* E\_GS\_HANDLE\_EXPIRED

## Comentários

<Note>Não é seguro chamar esta função em um thread sensível ao tempo. Para obter mais informações, consulte [Threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Você precisa chamar [XGameSaveCreateUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecreateupdate) com êxito antes de fazer esta chamada.

A parte de armazenamento desta API foi projetada para transferir dados facilmente do jogo para o armazenamento persistente de maneira segura, confiável e transacional. Queremos garantir que os dados de suporte de um contêiner estejam sempre consistentes e, por isso, queremos que toda a operação seja bem-sucedida ou falhe atomicamente. Não queremos uma atualização parcial em que alguns dados de blob fiquem inconsistentes com outros dados dentro do contêiner. Para isso, fornecemos um contexto de atualização ao qual as gravações e exclusões de blobs são enviadas e, quando ele estiver pronto, todo o contexto é enviado. Na prática, isso funciona da seguinte forma:

Um XGameSaveUpdate será preenchido com ações de gravação e exclusão a serem executadas em blobs dentro do contêiner por meio de [XGameSaveSubmitBlobWrite](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobwrite) e [XGameSaveSubmitBlobDelete](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobdelete). Uma atualização é concluída chamando [XGameSaveSubmitUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdate).

Quando terminar de usar um **XGameSaveUpdate**, feche-o usando o método [XGameSaveCloseUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecloseupdate).

O exemplo de C++ a seguir demonstra uma atualização síncrona do XGameSave.

```cpp theme={null}
// SYNC Write - should not be called on a time sensitive thread 
//              as this will block until the operation is complete 
void Sample::_SaveDataSync(const char* containerName, const char* containerDisplayName) 
{ 
    HRESULT hr; 
    XGameSaveContainerHandle containerContext; 
    XGameSaveUpdateHandle updateContext; 
  
    hr = XGameSaveCreateContainer(_provider, containerName, &containerContext); 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveCreateUpdate(containerContext, containerDisplayName, &updateContext); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "WorldState", _worldState.data(), _worldState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "PlayerState", _playerState.data(), _playerState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "PlayerInventory", _playerInventory.data(), _playerInventory.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        if (_clearLevelProgress) 
        { 
            hr = XGameSaveSubmitBlobDelete(updateContext, "LevelProgress"); 
        } 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitUpdate(updateContext); 
    } 
  
    if (updateContext) 
    { 
        XGameSaveCloseUpdate(updateContext); 
    } 
    if (containerContext) 
    { 
        XGameSaveCloseContainer(containerContext); 
    } 
  
    _HandleContainerUpdateErrors(hr); 
} 
  
  
void Sample::_HandleContainerUpdateErrors(HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_INVALID_CONTAINER_NAME: 
        // tried to access a container with an invalid name 
        break; 
    case E_GS_OUT_OF_LOCAL_STORAGE: 
        // storage location is full, let the user know that saves won't work till this is fixed 
        break; 
    case E_GS_UPDATE_TOO_BIG: 
        // the blob that we provided was too big, can't be larger than GS_MAX_BLOB_SIZE 
        break; 
    case E_GS_QUOTA_EXCEEDED: 
        // the update we did was larger than our overall quota, need to track that! (see XGameSaveQueryRemainingQuota & XGameSaveQueryRemainingQuotaAsync) 
        break; 
    case E_GS_CONTAINER_NOT_IN_SYNC: 
    case E_GS_CONTAINER_SYNC_FAILED: 
        // need to sync and we are offline ? 
        break; 
    case E_GS_HANDLE_EXPIRED: 
        // need to re-initialize since another device has taken 
        // ownership while we were suspended and/or busy 
        break; 
    } 
} 
```

## Requisitos

**Cabeçalho:** XGameSave.h

**Biblioteca:** xgameruntime.lib

**Plataformas com suporte:** Windows, consoles da família XBOX One e consoles XBOX Series

## Documentação conceitual

* [Depuração de salvamentos de jogos](/pt-BR/build/core-features/common/game-save/game-saves-debugging)
* [Threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Confira também

[XGameSave](/pt-BR/reference/system/xgamesave/xgamesave_members)\
[XGameSaveCreateUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecreateupdate)\
[XGameSaveSubmitBlobWrite](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobwrite)\
[XGameSaveSubmitBlobDelete](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobdelete)\
[XGameSaveCloseUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecloseupdate)
[Depuração de salvamentos de jogos](/pt-BR/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveSubmitUpdate](/reference/system/xgamesave/functions/xgamesavesubmitupdate.md)
- [XGameSaveCreateUpdate](/reference/system/xgamesave/functions/xgamesavecreateupdate.md)
- [XGameSaveSubmitBlobDelete](/reference/system/xgamesave/functions/xgamesavesubmitblobdelete.md)
- [XGameSaveSubmitBlobWrite](/reference/system/xgamesave/functions/xgamesavesubmitblobwrite.md)
