IDXGIKeyedMutex::AcquireSync 方法 (dxgi.h)

使用金鑰,取得共用資源的獨佔轉譯存取權。

語法

HRESULT AcquireSync(
  UINT64 Key,
  DWORD  dwMilliseconds
);

參數

Key

類型: UINT64

值,指出要授與存取權的裝置。 當目前擁有介面的裝置使用相同的值呼叫 IDXGIKeyedMutex::ReleaseSync 方法時,此方法將會成功。 此值可以是任何 UINT64 值。

dwMilliseconds

類型: DWORD

逾時間隔,以毫秒為單位。 如果間隔經過,而且索引鍵 Mutex 尚未使用指定的 Key釋放,這個方法會傳回 。 如果此值設定為零, AcquireSync 方法會測試是否已釋放索引鍵 Mutex 並立即傳回。 如果此值設定為 INFINITE,則逾時間隔永遠不會經過。

傳回值

類型: HRESULT

如果成功,則傳回S_OK。

如果擁有的裝置嘗試在同一個共用資源上建立另一個索引鍵的 Mutex, AcquireSync 會傳回E_FAIL。

AcquireSync 也可以傳回下列 DWORD 常數。 因此,您應該明確檢查這些常數。 如果您只在傳回值上使用 SUCCEEDED 宏來判斷 AcquireSync 是否成功,則不會攔截這些常數。

  • WAIT_ABANDONED - 共用表面和索引鍵 Mutex 不再處於一致狀態。 如果 AcquireSync 傳回此值,您應該釋放並重新建立索引鍵 Mutex 和共用介面。
  • WAIT_TIMEOUT - 在釋放指定索引鍵之前經過的逾時間隔。

備註

AcquireSync方法會建立多個裝置之間共用表面的鎖定,一次只允許一個裝置轉譯至表面。
此方法會使用金鑰來判斷目前哪些裝置具有介面的獨佔存取權。

使用D3D10_RESOURCE_MISC_FLAG列舉的D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX值建立介面時,您必須先呼叫AcquireSync方法,才能轉譯至介面。 當您完成轉譯至介面時,必須呼叫 ReleaseSync 方法。

若要取得共用資源的索引鍵 mutex 物件的參考,請呼叫資源的QueryInterface方法,並傳入IDXGIKeyedMutex介面的UUID。 如需取得此參考的詳細資訊,請參閱下列程式碼範例。

AcquireSync方法會使用金鑰,視介面的狀態而定:

  • 在初始建立時,介面未擁有,且任何裝置都可以呼叫 AcquireSync 方法來取得存取權。 對於未擁有的裝置,只有 0 的金鑰會成功。 呼叫任何其他金鑰的 AcquireSync 方法將會停止呼叫 CPU 執行緒。
  • 如果您在呼叫AcquireSync方法時,裝置擁有介面,則呼叫AcquireSync方法的 CPU 執行緒將會停止,直到擁有的裝置使用相同的 Key 呼叫ReleaseSync方法為止。
  • 例如,如果您呼叫AcquireSync方法時未擁有介面 (,則最後一個擁有裝置已呼叫ReleaseSync方法) ,如果您指定了上次呼叫ReleaseSync方法時所指定的相同索引鍵,AcquireSync方法將會成功。 使用任何其他索引鍵呼叫 AcquireSync 方法會導致停止。
  • 當擁有的裝置使用特定金鑰呼叫 ReleaseSync 方法,且多個裝置在使用相同金鑰呼叫 AcquireSync 方法之後正在等候時,任何一個等候的裝置都可以先喚醒。 裝置已喚醒的順序未定義。
  • 索引鍵 Mutex 不支援 對 AcquireSync 方法的遞迴呼叫。

範例

取得索引鍵 Mutex

下列程式碼範例示範如何取得共用資源的鎖定,以及如何在發行時指定金鑰。


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