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
Library Dxgi.lib

另请参阅

IDXGIDevice2