Compartilhar via


Método IDXGIKeyedMutex::AcquireSync (dxgi.h)

Usando uma chave, adquire acesso de renderização exclusivo a um recurso compartilhado.

Sintaxe

HRESULT AcquireSync(
  UINT64 Key,
  DWORD  dwMilliseconds
);

Parâmetros

Key

Tipo: UINT64

Um valor que indica a qual dispositivo conceder acesso. Esse método terá êxito quando o dispositivo que atualmente possui a superfície chamar o método IDXGIKeyedMutex::ReleaseSync usando o mesmo valor. Esse valor pode ser qualquer valor UINT64.

dwMilliseconds

Tipo: DWORD

O intervalo de tempo limite em milissegundos. Esse método retornará se o intervalo decorrido e o mutex com chave não tiver sido liberado usando a chave especificada. Se esse valor for definido como zero, o método AcquireSync testará para ver se o mutex com chave foi liberado e retornará imediatamente. Se esse valor for definido como INFINITE, o intervalo de tempo limite nunca será decorrido.

Valor retornado

Tipo: HRESULT

Retorne S_OK se tiver êxito.

Se o dispositivo proprietário tentou criar outro mutex com chave no mesmo recurso compartilhado, AcquireSync retornará E_FAIL.

AcquireSync também pode retornar as seguintes constantes DWORD . Portanto, você deve marcar explicitamente para essas constantes. Se você usar apenas a macro SUCCEEDED no valor retornado para determinar se AcquireSync foi bem-sucedido, não capturará essas constantes.

  • WAIT_ABANDONED - A superfície compartilhada e o mutex com chave não estão mais em um estado consistente. Se AcquireSync retornar esse valor, você deverá liberar e recriar o mutex com chave e a superfície compartilhada.
  • WAIT_TIMEOUT – o intervalo de tempo limite decorrido antes do lançamento da chave especificada.

Comentários

O método AcquireSync cria um bloqueio para uma superfície que é compartilhada entre vários dispositivos, permitindo que apenas um dispositivo seja renderizado em uma superfície de cada vez.
Esse método usa uma chave para determinar qual dispositivo atualmente tem acesso exclusivo à superfície.

Quando uma superfície é criada usando o valor D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX da enumeração D3D10_RESOURCE_MISC_FLAG , você deve chamar o método AcquireSync antes de renderizar para a superfície. Você deve chamar o método ReleaseSync quando terminar de renderizar para uma superfície.

Para adquirir uma referência ao objeto mutex com chave de um recurso compartilhado, chame o método QueryInterface do recurso e passe a UUID da interface IDXGIKeyedMutex . Para obter mais informações sobre como adquirir essa referência, consulte o exemplo de código a seguir.

O método AcquireSync usa a chave da seguinte maneira, dependendo do estado da superfície:

  • Na criação inicial, a superfície é sem proprietário e qualquer dispositivo pode chamar o método AcquireSync para obter acesso. Para um dispositivo sem proprietário, somente uma chave de 0 terá êxito. Chamar o método AcquireSync para qualquer outra chave atrasará o thread de CPU de chamada.
  • Se a superfície pertencer a um dispositivo quando você chamar o método AcquireSync , o thread da CPU que chamou o método AcquireSync irá parar até que o dispositivo proprietário chame o método ReleaseSync usando a mesma Chave.
  • Se a superfície não for semeada quando você chamar o método AcquireSync (por exemplo, o último dispositivo proprietário já chamou o método ReleaseSync ), o método AcquireSync terá êxito se você especificar a mesma chave especificada quando o método ReleaseSync foi chamado pela última vez. Chamar o método AcquireSync usando qualquer outra chave causará uma parada.
  • Quando o dispositivo proprietário chama o método ReleaseSync com uma chave específica e mais de um dispositivo está aguardando depois de chamar o método AcquireSync usando a mesma chave, qualquer um dos dispositivos em espera pode ser acordado primeiro. A ordem na qual os dispositivos são acordados é indefinida.
  • Um mutex com chave não dá suporte a chamadas recursivas para o método AcquireSync .

Exemplos

Adquirir um Mutex com chave

O exemplo de código a seguir demonstra como adquirir um bloqueio para um recurso compartilhado e como especificar uma chave após a versão.


// pDesc has already been set up with texture description.
pDesc.MiscFlags = D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX;

// Create a shared texture resource.
pD3D10DeviceD->CreateTexture2D(pDesc, NULL, pD3D10Texture);

// Acquire a reference to the keyed mutex.
pD3D10Texture->QueryInterface(_uuidof(IDXGIKeyedMutex), pDXGIKeyedMutex);

// Acquire a lock to the resource.
pDXGIKeyedMutex->AcquireSync(0, INFINITE);

// Release the lock and specify a key.
pDXGIKeyedMutex->ReleaseSync(1);
          

Requisitos

   
Plataforma de Destino Windows
Cabeçalho dxgi.h
Biblioteca DXGI.lib

Confira também

DXGI Interfaces

IDXGIKeyedMutex

IDXGIKeyedMutex::ReleaseSync