IDXGIDevice2::EnqueueSetEvent 方法 (dxgi1_2.h)
排清任何未完成的轉譯命令,並將指定的事件物件設定為所有先前提交轉譯命令完成後的訊號狀態。
語法
HRESULT EnqueueSetEvent(
[in] HANDLE hEvent
);
參數
[in] hEvent
事件物件的句柄。 CreateEvent 或 OpenEvent 函式會傳回這個句柄。 支援 (手動重設、自動重設等) 的所有事件物件類型。
句柄必須具有EVENT_MODIFY_STATE訪問許可權。 如需訪問許可權的詳細資訊,請參閱 同步處理物件安全性和訪問許可權。
傳回值
如果成功 , 則傳回S_OK;否則,會傳回下列其中一個值:
- 如果 記憶體不足而無法完成作業,E_OUTOFMEMORY。
- E_INVALIDARG 是否已驗證參數,並判斷為不正確。
備註
EnqueueSetEvent 會在所有先前提交的轉譯命令完成或移除裝置之後,在事件物件上呼叫 SetEvent 函式。
應用程式呼叫 EnqueueSetEvent 之後,它可以立即呼叫 WaitForSingleObject 函式,使其進入睡眠狀態,直到轉譯命令完成為止。
您無法使用 EnqueueSetEvent 來判斷與簡報 (IDXGISwapChain::P resent) 相關聯的工作完成;相反地,建議您使用 IDXGISwapChain::GetFrameStatistics。
範例
下列範例程式代碼示範如何使用 EnqueueSetEvent。
void BlockingFinish( IDXGIDevice2* pDevice )
{
// Create a manual-reset event object.
hEvent = CreateEvent(
NULL, // default security attributes
TRUE, // manual-reset event
FALSE, // initial state is nonsignaled
FALSE
);
if (hEvent == NULL)
{
printf("CreateEvent failed (%d)\n", GetLastError());
return;
}
pDevice->EnqueueSetEvent(hEvent);
DWORD dwWaitResult = WaitForSingleObject(
hEvent, // event handle
INFINITE); // indefinite wait
switch (dwWaitResult)
{
// Event object was signaled
case WAIT_OBJECT_0:
// Commands completed
break;
// An error occurred
default:
printf("Wait error (%d)\n", GetLastError());
return 0;
}
CloseHandle(hEvent);
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | 適用於 Windows Server 2008 R2 的 Windows Server 2012 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | dxgi1_2.h |
程式庫 | Dxgi.lib |