PDD_WAITFORVERTICALBLANK回呼函式 (ddrawint.h)
DdWaitForVerticalBlank 回呼函式會傳回裝置的垂直空白狀態。
語法
PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;
DWORD PddWaitforverticalblank(
PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}
參數
unnamedParam1
指向 DD_WAITFORVERTICALBLANKDATA 結構,其中包含取得垂直空白狀態所需的資訊。
傳回值
DdWaitForVerticalBlank 會傳回下列其中一個回呼代碼:
備註
根據 lpWaitForVerticalBlank 上 DD_WAITFORVERTICALBLANKDATA 結構之 dwFlags 成員的值,驅動程式應該執行下列動作:
- 如果 dwFlags DDWAITVB_I_TESTVB,驅動程式應該查詢目前的垂直空白狀態。 如果監視器目前處於垂直空白,驅動程式應該將 DD_WAITFORVERTICALBLANKDATA 的 bIsInVB 成員設定為 TRUE ;否則驅動程式應將 bIsInVB 設定為 FALSE。
- 如果 dwFlags DDWAITVB_BLOCKBEGIN,驅動程式應該封鎖並等候垂直空白開始。 如果驅動程式開始區塊時正在進行垂直空白,驅動程序應該等到下一個垂直空白開始再傳回。
- 如果 dwFlags 是DDWAITVB_BLOCKEND,驅動程式應該封鎖並等候垂直空白結束。
DdWaitForVerticalBlank 可讓應用程式與 VBI) (垂直空白間隔進行同步處理。
注意:如果監視電源狀態會導致驅動程式停止回應,則 DdWaitForVerticalBlank 絕對不應該進入輪詢迴圈。 例如,在監視器關閉電源期間,應用程式可能會呼叫 WaitForVerticalBlank。 DirectDraw 運行時間會呼叫顯示驅動程式的 DdWaitForVerticalBlank 進入點,以等候狀態變更。 如果監視器已關閉電源,此值永遠不會變更,除非驅動程式寫入器準備此案例。 其中一個解決方案是在等候垂直空白時,在輪詢迴圈中包含逾時。 如果監視器已關閉電源,則範例 Permedia2 驅動程式只會設定為完全不輪詢。
WHQL 顯示相容性測試 (DCT) 也有問題。 電源管理的其中一個 DCT 會關閉監視器,然後輪詢垂直空白狀態,等候變更。 如果驅動程式在關閉監視器時一律報告相同的垂直空白狀態,則測試應用程式會停止回應,等候結果變更。 這是在 Permedia2 範例驅動程式中修正的,方法是在監視器關閉電源時傳回替代的結果。 也就是說,第一次呼叫驅動程式的 DdWaitForVerticalBlank 進入點時,DDWAIT_I_TESTVB旗標 (當監視器關閉電源) 時,它會傳回 FALSE,下次傳回 TRUE、下一次 傳回 FALSE 等。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | ddrawint.h (包含 Winddi.h) |