Share via


IDXGIKeyedMutex::AcquireSync 메서드(dxgi.h)

키를 사용하여 공유 리소스에 대한 단독 렌더링 액세스 권한을 획득합니다.

구문

HRESULT AcquireSync(
  UINT64 Key,
  DWORD  dwMilliseconds
);

매개 변수

Key

형식: UINT64

액세스 권한을 부여할 디바이스를 나타내는 값입니다. 현재 표면을 소유하고 있는 디바이스가 동일한 값을 사용하여 IDXGIKeyedMutex::ReleaseSync 메서드를 호출하면 이 메서드가 성공합니다. 이 값은 UINT64 값일 수 있습니다.

dwMilliseconds

형식: DWORD

제한 시간 간격(밀리초)입니다. 이 메서드는 간격이 경과하고 지정된 키를 사용하여 키가 지정된 뮤텍스가 해제되지 않은 경우 를 반환합니다. 이 값을 0으로 설정하면 AcquireSync 메서드가 테스트하여 키 지정 뮤텍스가 해제되어 즉시 반환되는지 확인합니다. 이 값을 INFINITE로 설정하면 제한 시간 간격이 경과하지 않습니다.

반환 값

형식: HRESULT

성공하면 S_OK 반환합니다.

소유 디바이스가 동일한 공유 리소스에 다른 키로 된 뮤텍스를 만들려고 하면 AcquireSync 는 E_FAIL 반환합니다.

AcquireSync 는 다음 DWORD 상수를 반환할 수도 있습니다. 따라서 이러한 상수에 대해 명시적으로 검사 합니다. Return 값에 SUCCEEDED 매크로만 사용하여 AcquireSync 가 성공했는지 확인하는 경우 이러한 상수를 catch하지 않습니다.

  • WAIT_ABANDONED - 공유 표면 및 키 뮤텍스가 더 이상 일관된 상태가 아닙니다. AcquireSync가 이 값을 반환하는 경우 키 지정 뮤텍스와 공유 표면을 모두 해제하고 다시 만들어야 합니다.
  • WAIT_TIMEOUT - 지정된 키가 해제되기 전에 시간 제한 간격이 경과합니다.

설명

AcquireSync 메서드는 여러 디바이스 간에 공유되는 표면에 대한 잠금을 만들어 한 번에 하나의 디바이스만 표면에 렌더링할 수 있도록 합니다.
이 메서드는 키를 사용하여 현재 표면에 대한 단독 액세스 권한이 있는 디바이스를 확인합니다.

D3D10_RESOURCE_MISC_FLAG 열거형의 D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX 값을 사용하여 표면을 만들 때 Surface로 렌더링하기 전에 AcquireSync 메서드를 호출해야 합니다. 화면에 렌더링을 완료하면 ReleaseSync 메서드를 호출해야 합니다.

공유 리소스의 키 지정된 뮤텍스 개체에 대한 참조를 가져오려면 리소스의 QueryInterface 메서드를 호출하고 IDXGIKeyedMutex 인터페이스의 UUID를 전달합니다. 이 참조를 가져오는 방법에 대한 자세한 내용은 다음 코드 예제를 참조하세요.

AcquireSync 메서드는 표면 상태에 따라 다음과 같이 키를 사용합니다.

  • 초기 생성 시 표면은 소유되지 않으며 모든 디바이스가 AcquireSync 메서드를 호출하여 액세스 권한을 얻을 수 있습니다. 소유하지 않은 디바이스의 경우 키 0만 성공합니다. 다른 키에 대해 AcquireSync 메서드를 호출하면 호출하는 CPU 스레드가 중단됩니다.
  • AcquireSync 메서드를 호출할 때 Surface가 디바이스에서 소유하는 경우 AcquireSync 메서드를 호출한 CPU 스레드는 소유 디바이스가 동일한 키를 사용하여 ReleaseSync 메서드를 호출할 때까지 중단됩니다.
  • AcquireSync 메서드를 호출할 때 표면이 소유되지 않은 경우(예: 마지막 소유 디바이스가 이미 ReleaseSync 메서드를 호출한 경우), ReleaseSync 메서드가 마지막으로 호출될 때 지정한 것과 동일한 키를 지정하면 AcquireSync 메서드가 성공합니다. 다른 키를 사용하여 AcquireSync 메서드를 호출하면 중단이 발생합니다.
  • 소유 디바이스가 특정 키를 사용하여 ReleaseSync 메서드를 호출하고 동일한 키를 사용하여 AcquireSync 메서드를 호출한 후 둘 이상의 디바이스가 대기 중인 경우 대기 중인 디바이스 중 하나가 먼저 해제될 수 있습니다. 디바이스가 해제되는 순서는 정의되지 않습니다.
  • 키 지정된 뮤텍스는 AcquireSync 메서드에 대한 재귀 호출을 지원하지 않습니다.

예제

키 지정된 뮤텍스 획득

다음 코드 예제에서는 공유 리소스에 대한 잠금을 획득하는 방법과 릴리스 시 키를 지정하는 방법을 보여 줍니다.


// 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);
          

요구 사항

   
대상 플랫폼 Windows
헤더 dxgi.h
라이브러리 DXGI.lib

추가 정보

DXGI 인터페이스

IDXGIKeyedMutex

IDXGIKeyedMutex::ReleaseSync