Share via


IDXGIDevice2::EnqueueSetEvent 方法 (dxgi1_2.h)

排清任何未完成的轉譯命令,並將指定的事件物件設定為所有先前提交轉譯命令完成後的訊號狀態。

語法

HRESULT EnqueueSetEvent(
  [in] HANDLE hEvent
);

參數

[in] hEvent

事件物件的句柄。 CreateEventOpenEvent 函式會傳回這個句柄。 支援 (手動重設、自動重設等) 的所有事件物件類型。

句柄必須具有EVENT_MODIFY_STATE訪問許可權。 如需訪問許可權的詳細資訊,請參閱 同步處理物件安全性和訪問許可權

傳回值

如果成功 則傳回S_OK;否則,會傳回下列其中一個值:

  • 如果 記憶體不足而無法完成作業,E_OUTOFMEMORY。
  • E_INVALIDARG 是否已驗證參數,並判斷為不正確。
適用於 Windows 7 的平臺更新: 在已安裝 Windows 7 平臺更新 的 Windows 7 或 Windows Server 2008 R2 上, EnqueueSetEvent 會失敗並E_NOTIMPL。 如需 Windows 7 平臺更新的詳細資訊,請參閱 適用於 Windows 7 的平臺更新

備註

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

另請參閱

IDXGIDevice2