次の方法で共有


IDXGIKeyedMutex::AcquireSync メソッド (dxgi.h)

キーを使用して、共有リソースへの排他的レンダリング アクセスを取得します。

構文

HRESULT AcquireSync(
  UINT64 Key,
  DWORD  dwMilliseconds
);

パラメーター

Key

型: UINT64

アクセス権を付与するデバイスを示す 値。 このメソッドは、現在サーフェスを所有しているデバイスが同じ値を使用して IDXGIKeyedMutex::ReleaseSync メソッドを呼び出すと成功します。 この値には、任意の UINT64 値を指定できます。

dwMilliseconds

種類: DWORD

タイムアウト間隔 (ミリ秒単位)。 このメソッドは、間隔が経過し、指定した Key を使用してキー付きミューテックスが解放されていない場合にを返 します。 この値が 0 に設定されている場合、 AcquireSync メソッドは、キー付きミューテックスが解放されたかどうかをテストし、直ちにを返します。 この値が INFINITE に設定されている場合、タイムアウト間隔は経過しません。

戻り値

種類: HRESULT

成功した場合は、S_OKを返します。

所有デバイスが同じ共有リソースに別のキー付きミューテックスを作成しようとした場合、 AcquireSync はE_FAILを返します。

AcquireSync は、次の DWORD 定数を返すこともできます。 そのため、これらの定数を明示的にチェックする必要があります。 戻り値で SUCCEEDED マクロのみを使用して AcquireSync が成功したかどうかを判断する場合、これらの定数はキャッチされません。

  • WAIT_ABANDONED - 共有サーフェスとキー付きミューテックスが一貫した状態ではなくなりました。 AcquireSync がこの値を返す場合は、キー付きミューテックスと共有サーフェイスの両方を解放して再作成する必要があります。
  • WAIT_TIMEOUT - 指定したキーが解放されるまでのタイムアウト間隔。

解説

AcquireSync メソッドは、複数のデバイス間で共有されるサーフェスにロックを作成し、一度に 1 つのデバイスのみをサーフェスにレンダリングできるようにします。
このメソッドでは、キーを使用して、現在サーフェスに排他的にアクセスできるデバイスを特定します。

D3D10_RESOURCE_MISC_FLAG列挙のD3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX値を使用してサーフェスを作成する場合は、サーフェスにレンダリングする前に AcquireSync メソッドを呼び出す必要があります。 サーフェスへのレンダリングが完了したら、 ReleaseSync メソッドを呼び出す必要があります。

共有リソースのキー付きミューテックス オブジェクトへの参照を取得するには、リソースの QueryInterface メソッドを呼び出し、IDXGIKeyedMutex インターフェイスの UUID を渡します。 このリファレンスの取得の詳細については、次のコード例を参照してください。

AcquireSync メソッドは、サーフェスの状態に応じて、次のようにキーを使用します。

  • 最初の作成時に、サーフェスは未所有であり、どのデバイスでも AcquireSync メソッドを呼び出してアクセスできます。 未所有のデバイスの場合、0 のキーのみが成功します。 他のキーに対して AcquireSync メソッドを呼び出すと、呼び出し元の CPU スレッドが停止します。
  • AcquireSync メソッドを呼び出すときにサーフェスがデバイスによって所有されている場合、AcquireSync メソッドを呼び出した CPU スレッドは、所有しているデバイスが同じ Key を使用して 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
Library DXGI.lib

関連項目

DXGI インターフェイス

IDXGIKeyedMutex

IDXGIKeyedMutex::ReleaseSync