PFND3DDDI_SETASYNCCALLBACKSCB回调函数 (d3dumddi.h)

pfnSetAsyncCallbacksCb 函数通知 Microsoft Direct3D 运行时运行时是启动还是停止从工作线程接收对运行时回调函数的调用。

语法

PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;

HRESULT Pfnd3dddiSetasynccallbackscb(
  HANDLE hDevice,
  BOOL Enable
)
{...}

参数

hDevice

显示设备的句柄 (图形上下文) 。

Enable

一个布尔值,指定运行时是启动还是停止从工作线程接收对运行时回调函数的调用。 TRUE 指示运行时将开始从工作线程接收对其回调函数的调用; FALSE 指示运行时将停止从工作线程接收对其回调函数的调用。

返回值

pfnSetAsyncCallbacksCb 返回以下值之一:

返回代码 说明
S_OK 已成功通知 Direct3D 运行时。
E_INVALIDARG 参数已验证,确定为不正确。

此函数还可能返回其他 HRESULT 值。

注解

如果用户模式显示驱动程序实现其自己的多处理器优化 (即,驱动程序创建工作线程并处理该线程) 中的命令,则驱动程序必须调用 pfnSetAsyncCallbacksCb 以通知 Direct3D 运行时是启动还是停止接收来自工作线程的运行时回调函数的调用。 此外,此类驱动程序不得实现 LockAsyncUnlockAsyncRename 函数。 这可确保运行时不会尝试使用自己的多处理器优化。

用户模式显示驱动程序只能在main应用程序线程 (调用 pfnSetAsyncCallbacksCb,即调用驱动程序) 的线程。 驱动程序的工作线程无法调用 pfnSetAsyncCallbacksCb。 在任何时间点,只有一个引用特定呈现设备的线程可以在任何运行时的回调函数中运行。

在用户模式显示驱动程序在除 main 应用程序线程以外的线程上调用任何运行时的回调函数之前,驱动程序必须在调用 pfnSetAsyncCallbacksCb 时将 TRUE 传递给 Enable 参数。 在用户模式显示驱动程序在main应用程序线程上调用运行时的任何回调函数之前,驱动程序必须在调用 pfnSetAsyncCallbacksCb 时将 FALSE 传递给 Enable 参数。

在每个呈现设备的 Flush 实现中,驱动程序调用 pfnSetAsyncCallbacksCb 并将 FALSE 传递给 Enable 参数。

当驱动程序在调用 pfnSetAsyncCallbacksCb 时将 TRUE 传递给 Enable 参数时,运行时将自身置于不立即响应其回调函数中的设备丢失情况的状态。 相反,当运行时检测到设备在此状态下在回调函数中丢失时,它会设置一个指示事件发生的位。 当驱动程序在调用 pfnSetAsyncCallbacksCb 时将 FALSE 传递给 Enable 参数时,运行时会检查位以确定是否发生了设备丢失。 如果设置了位,运行时将执行其典型的设备丢失处理。 此后,驱动程序不再从运行时接收对其函数的大多数调用。

只有 DirectX 9 和 DirectX 9L 版本的运行时支持 pfnSetAsyncCallbacksCb。 当运行时调用用户模式显示驱动程序的 CreateDevice (D3D10 ) 函数来创建呈现设备时,运行时的 DirectX 10 及更高版本运行时将 D3DDDI_DEVICECALLBACKS 结构的 pfnSetAsyncCallbacksCb 成员设置为 NULL

注意 低于 9 的 DirectX 版本不支持多处理器优化。
 
如果运行时以前在调用驱动程序的 CreateDevice 函数时将 D3DDDI_DEVICECALLBACKS 的 pfnSetAsyncCallbacksCb 成员设置为非 NULL,则驱动程序只能从工作线程调用运行时的回调函数。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

CreateDevice

CreateDevice (D3D10)

D3DDDI_DEVICECALLBACKS

刷新

LockAsync

重命名

UnlockAsync