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