Partager via


PDD_WAITFORVERTICALBLANK fonction de rappel (ddrawint.h)

La fonction de rappel DdWaitForVerticalBlank retourne la status vide verticale de l’appareil.

Syntaxe

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

Paramètres

unnamedParam1

Pointe vers une structure DD_WAITFORVERTICALBLANKDATA qui contient les informations requises pour obtenir le status vide vertical.

Valeur retournée

DdWaitForVerticalBlank retourne l’un des codes de rappel suivants :

Remarques

Selon la valeur du membre dwFlags de la structure DD_WAITFORVERTICALBLANKDATA sur lpWaitForVerticalBlank, le pilote doit effectuer les opérations suivantes :

  • Si dwFlags est DDWAITVB_I_TESTVB, le pilote doit interroger le status de remplissage vertical actuel. Le pilote doit définir le membre bIsInVB de DD_WAITFORVERTICALBLANKDATA sur TRUE si le moniteur est actuellement dans un vide vertical ; sinon, le pilote doit définir bIsInVB sur FALSE.
  • Si dwFlags est DDWAITVB_BLOCKBEGIN, le pilote doit bloquer et attendre qu’un vide vertical commence. Si un vide vertical est en cours lorsque le pilote commence le bloc, le pilote doit attendre que le vide vertical suivant commence avant de revenir.
  • Si dwFlags est DDWAITVB_BLOCKEND, le pilote doit bloquer et attendre qu’un vide vertical se termine.
Lorsque le pilote gère correctement l’action spécifiée dans dwFlags, il doit définir DD_OK dans le membre ddRVal de DD_WAITFORVERTICALBLANKDATA et retourner DDHAL_DRIVER_HANDLED. Le conducteur doit retourner DDHAL_DRIVER_NOTHANDLED pour les indicateurs qu’il ne peut pas manipuler.

DdWaitForVerticalBlank permet à une application de se synchroniser avec l’intervalle de remplissage vertical (VBI).

RemarqueDdWaitForVerticalBlank ne doit jamais entrer dans une boucle d’interrogation si l’état d’alimentation du moniteur provoque le blocage du pilote. Par exemple, lors d’une mise hors tension d’un moniteur, une application peut appeler WaitForVerticalBlank. Le runtime DirectDraw appelle le point d’entrée DdWaitForVerticalBlank du pilote d’affichage, qui attend que le status change. Si le moniteur est hors tension, cette valeur ne change jamais, sauf si l’enregistreur de pilotes se prépare à ce scénario. Une solution consiste à inclure un délai d’expiration dans la boucle d’interrogation en attendant un vide vertical. L’exemple de pilote Permedia2 est simplement défini pour ne pas interroger du tout si le moniteur est hors tension.

Il existe également un problème avec les tests de compatibilité d’affichage (DCT) WHQL. L’un des DCT pour la gestion de l’alimentation met le moniteur hors tension, puis interroge le status vide vertical, en attendant qu’il change. Si le pilote signale toujours le même status vide vertical lorsque le moniteur est mis hors tension, l’application de test se bloque en attendant que le résultat change. Ce problème a été résolu dans l’exemple de pilote Permedia2 en retournant des résultats en alternance alors que le moniteur est hors tension. Autrement dit, la première fois que le point d’entrée DdWaitForVerticalBlank du pilote est appelé avec l’indicateur DDWAIT_I_TESTVB (lorsque le moniteur est hors tension), il retourne FALSE, la prochaine fois qu’il retourne TRUE, la prochaine fois FALSE, etc.

 

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête ddrawint.h (incluez Winddi.h)

Voir aussi

DD_WAITFORVERTICALBLANKDATA