次の方法で共有


コールバック関数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 に設定する必要があります。それ以外の場合、ドライバーは bIsInVBFALSE に設定する必要があります。
  • dwFlags がDDWAITVB_BLOCKBEGINされている場合、ドライバーはブロックし、垂直空白が始まるまで待機する必要があります。 ドライバーがブロックを開始するときに垂直空白が進行中の場合、ドライバーは、次の垂直空白が開始されるまで待機してから、戻る必要があります。
  • dwFlags がDDWAITVB_BLOCKENDされている場合、ドライバーはブロックし、垂直空白が終了するまで待機する必要があります。
ドライバーが dwFlags で指定されたアクションを正常に処理したら、DD_WAITFORVERTICALBLANKDATA の ddRVal メンバーにDD_OKを設定し、DDHAL_DRIVER_HANDLEDを返す必要があります。 ドライバーは、処理できないフラグのDDHAL_DRIVER_NOTHANDLEDを返す必要があります。

DdWaitForVerticalBlank を使用すると、アプリケーションはそれ自体を垂直ブランキング間隔 (VBI) と同期できます。

DdWaitForVerticalBlank は、モニターの電源状態によってドライバーがハングする場合、ポーリング ループに入ることはありません。 たとえば、モニターの電源ダウン中に、アプリケーションが WaitForVerticalBlank を呼び出す場合があります。 DirectDraw ランタイムは、ディスプレイ ドライバーの DdWaitForVerticalBlank エントリ ポイントを呼び出します。このエントリ ポイントは、状態の変更を待機します。 モニターの電源が切れている場合、ドライバーライターがこのシナリオに備えない限り、この値は変更されません。 解決策の 1 つは、垂直方向の空白を待機している間に、ポーリング ループにタイムアウトを含める方法です。 サンプルの Permedia2 ドライバーは、モニターの電源がオフになっている場合は、まったくポーリングしないように設定されています。

WHQL ディスプレイ互換性テスト (DCT) にも問題があります。 電源管理用の DCT の 1 つがモニターの電源を切り、垂直の空白状態をポーリングし、変更を待機します。 モニターの電源が切れているときにドライバーが常に同じ垂直空の状態を報告する場合、テスト アプリケーションは結果が変更されるのを待ってハングします。 これは、モニターの電源が切れている間に交互の結果を返すことによって Permedia2 サンプル ドライバーで修正されました。 つまり、ドライバーの DdWaitForVerticalBlank エントリ ポイントが初めて DDWAIT_I_TESTVB フラグを使用して呼び出されたとき (モニターの電源がオフの場合)、次に TRUE を返すときは FALSE、次回は FALSE などを返します。

 

要件

要件
対象プラットフォーム デスクトップ
Header ddrawint.h (Winddi.h を含む)

こちらもご覧ください

DD_WAITFORVERTICALBLANKDATA