C++ 在DXGI工厂销毁之前,是否应注销向RegisterOcclusionStatusEvent注册的事件?

C++ 在DXGI工厂销毁之前,是否应注销向RegisterOcclusionStatusEvent注册的事件?,c++,winapi,directx,dxgi,C++,Winapi,Directx,Dxgi,我正在注册通过调用IDXGIFactory2::RegisterOcclusionStatusEvent创建的遮挡事件。此方法为我提供了一个cookie,我可以稍后将其传递到IDXGIFactory2::unregisteroclusionstatus。我假设我仍然拥有这个事件句柄的所有权,并在销毁DXGI工厂后关闭它。但是,忽略cookie并销毁工厂而不注销事件实际上安全吗?这取决于实现IDXGIFactory2。更快的注册表结论statusEvent分配类似std::pair-的内容并将其插

我正在注册通过调用
IDXGIFactory2::RegisterOcclusionStatusEvent
创建的遮挡事件。此方法为我提供了一个cookie,我可以稍后将其传递到
IDXGIFactory2::unregisteroclusionstatus
。我假设我仍然拥有这个事件句柄的所有权,并在销毁DXGI工厂后关闭它。但是,忽略cookie并销毁工厂而不注销事件实际上安全吗?

这取决于实现
IDXGIFactory2
。更快的
注册表结论statusEvent
分配类似
std::pair
-
的内容并将其插入某个容器中。调用
UnregisterOcclusionStatus
时,此条目将被删除并解除分配。同样在析构函数中,这个容器可能会被销毁,所有仍然存在的条目都会被释放。但不需要依靠这种猜测。需要在此界面上直接调用
unregisterOccessionStatus
调用前的最低/通常状态
Release
。如果将指针保存到接口,那么在保存
dwCookie
时会出现什么问题?假定的问题从工厂实例泄漏(引用过多和生命周期延长)到事件句柄不再有效时的内部使用(或重复事件句柄泄漏)。虽然所有提到的似乎都不是致命的,但不注销不会带来任何严重问题。因为文档并没有准确地记录行为(例如“调用者必须注销…”等),而且行为实际上可能会改变,所以我认为最安全的方法是注销,而不要考虑其他方法可能带来的副作用。
GetFrameLatencyWaitableObject
返回事件句柄。您成为此手柄的所有者,需要在不再需要时关闭它。当
注册表结论StatusEvent
时,只需保存事件句柄并使用。它假定句柄在您不调用
UnregisterOcclusionStatus
之前是有效的。在任何情况下,绝对安全调用
取消注册闭塞状态
在您关闭自己的事件之前的任何时间是的,文档没有说明,但必须关闭此句柄,这从GetFrameLatencyWaitableObject的查看代码中非常清楚-它在某些对象上调用DuplicateHandle并返回给您重复的句柄。再也没有人有这个把柄了。因此,如果您不关闭它-将导致资源泄漏,直到进程未终止为止。因此,示例在此处出错-它必须关闭m_FrameLatencyWaitableObjects这取决于实现
IDXGIFactory2
。更快的
注册表结论statusEvent
分配类似
std::pair
-
的内容并将其插入某个容器中。调用
UnregisterOcclusionStatus
时,此条目将被删除并解除分配。同样在析构函数中,这个容器可能会被销毁,所有仍然存在的条目都会被释放。但不需要依靠这种猜测。需要在此界面上直接调用
unregisterOccessionStatus
调用前的最低/通常状态
Release
。如果将指针保存到接口,那么在保存
dwCookie
时会出现什么问题?假定的问题从工厂实例泄漏(引用过多和生命周期延长)到事件句柄不再有效时的内部使用(或重复事件句柄泄漏)。虽然所有提到的似乎都不是致命的,但不注销不会带来任何严重问题。因为文档并没有准确地记录行为(例如“调用者必须注销…”等),而且行为实际上可能会改变,所以我认为最安全的方法是注销,而不要考虑其他方法可能带来的副作用。
GetFrameLatencyWaitableObject
返回事件句柄。您成为此手柄的所有者,需要在不再需要时关闭它。当
注册表结论StatusEvent
时,只需保存事件句柄并使用。它假定句柄在您不调用
UnregisterOcclusionStatus
之前是有效的。在任何情况下,绝对安全调用
取消注册闭塞状态
在您关闭自己的事件之前的任何时间是的,文档没有说明,但必须关闭此句柄,这从GetFrameLatencyWaitableObject的查看代码中非常清楚-它在某些对象上调用DuplicateHandle并返回给您重复的句柄。再也没有人有这个把柄了。所以,若你们不关闭它——将是资源泄漏,直到进程未终止——所以这里的示例是错误的——它必须关闭m_frameLatencyWaitableObject