共用方式為


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,驅動程式應該封鎖並等候垂直空白結束。
當驅動程式成功處理 dwFlags 中指定的動作時,它應該會在 DD_WAITFORVERTICALBLANKDATA 的 ddRVal 成員中設定DD_OK,並傳回DDHAL_DRIVER_HANDLED。 驅動程式應該會針對無法處理的旗標傳回DDHAL_DRIVER_NOTHANDLED。

DdWaitForVerticalBlank 可讓應用程式與 VBI) (垂直空白間隔進行同步處理。

注意:如果監視電源狀態會導致驅動程式停止回應,則 DdWaitForVerticalBlank 絕對不應該進入輪詢迴圈。 例如,在監視器關閉電源期間,應用程式可能會呼叫 WaitForVerticalBlank。 DirectDraw 運行時間會呼叫顯示驅動程式的 DdWaitForVerticalBlank 進入點,以等候狀態變更。 如果監視器已關閉電源,此值永遠不會變更,除非驅動程式寫入器準備此案例。 其中一個解決方案是在等候垂直空白時,在輪詢迴圈中包含逾時。 如果監視器已關閉電源,則範例 Permedia2 驅動程式只會設定為完全不輪詢。

WHQL 顯示相容性測試 (DCT) 也有問題。 電源管理的其中一個 DCT 會關閉監視器,然後輪詢垂直空白狀態,等候變更。 如果驅動程式在關閉監視器時一律報告相同的垂直空白狀態,則測試應用程式會停止回應,等候結果變更。 這是在 Permedia2 範例驅動程式中修正的,方法是在監視器關閉電源時傳回替代的結果。 也就是說,第一次呼叫驅動程式的 DdWaitForVerticalBlank 進入點時,DDWAIT_I_TESTVB旗標 (當監視器關閉電源) 時,它會傳回 FALSE,下次傳回 TRUE、下一次 傳回 FALSE 等。

 

規格需求

需求
目標平台 桌面
標頭 ddrawint.h (包含 Winddi.h)

另請參閱

DD_WAITFORVERTICALBLANKDATA