共用方式為


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 函式。 這可確保運行時間不會嘗試使用自己的多處理器優化。

使用者模式顯示驅動程式只能在主要應用程式線程上呼叫 pfnSetAsyncCallbacksCb pfnSetAsyncCallbacksCb(也就是呼叫至驅動程式的線程)。 驅動程式的背景工作線程無法呼叫 pfnSetAsyncCallbacksCb 。 在任何時間點,只有一個參考特定轉譯裝置的線程可以在任何運行時間的回呼函式中執行。

在使用者模式顯示驅動程式在主應用程式線程以外的線程上呼叫任何運行時間回呼函式之前,驅動程式必須將 TRUE 傳遞至呼叫中 pfnSetAsyncCallbacksCbEnable 參數。 在使用者模式顯示驅動程式在主要應用程式線程上呼叫任何運行時間的回呼函式之前,驅動程式必須將 FALSE 傳遞至呼叫 pfnSetAsyncCallbacksCbEnable 參數。

在每個轉譯裝置的 Flush 實作中,驅動程式會 呼叫 pfnSetAsyncCallbacksCb,並將 FALSE 傳遞至 Enable 參數。

當驅動程式在呼叫 pfnSetAsyncCallbacksCb 時,將 TRUE 傳遞給Enable 參數時,運行時間會將本身置於無法立即回應其回呼函式中裝置遺失情況的狀態。 相反地,當運行時間偵測到處於此狀態的回呼函式中遺失的裝置時,它會設定指出事件發生的位。 當驅動程式在呼叫 pfnSetAsyncCallbacksCb 時,將 FALSE 傳遞至Enable 參數時,運行時間會檢查位以判斷裝置是否遺失。 如果設定位,運行時間會執行其一般裝置遺失的處理。 在這一點之後,驅動程式不再從運行時間接收其函式的大部分呼叫。

只有 DirectX 9 和 DirectX 9L 版本的運行時間支援 pfnSetAsyncCallbacksCb。 當運行時間呼叫使用者模式顯示驅動程式的 CreateDevice(D3D10) 函式時,directX 10 和更新版本的運行時間會將 pfnSetAsyncCallbacksCb pfnSetAsyncCallbacksCbD3DDDI_DEVICECALLBACKS 成員設定為 NULL

注意 9 之前的 DirectX 版本不支援多重處理器優化。
 
驅動程式只有在運行時間先前將 pfnSetAsyncCallbacksCb 的 pfnSetAsyncCallbacksCb D3DDDI_DEVICECALLBACKS 成員設為非NULL 時,才能從背景工作線程呼叫運行時間 的回呼函式。

要求

要求 價值
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows作系統中使用。
目標平臺 桌面
標頭 d3dumddi.h (包括 D3dumddi.h)

另請參閱

CreateDevice

CreateDevice(D3D10)

D3DDDI_DEVICECALLBACKS

Flush

LockAsync

重新命名

UnlockAsync