Freigeben über


PDD_WAITFORVERTICALBLANK Rückruffunktion (ddrawint.h)

Die DdWaitForVerticalBlank-Rückruffunktion gibt die vertikale leere status des Geräts zurück.

Syntax

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

Parameter

unnamedParam1

Zeigt auf eine DD_WAITFORVERTICALBLANKDATA-Struktur, die die zum Abrufen des vertikalen leeren status erforderlichen Informationen enthält.

Rückgabewert

DdWaitForVerticalBlank gibt einen der folgenden Rückrufcodes zurück:

Hinweise

Abhängig vom Wert des dwFlags-Members der DD_WAITFORVERTICALBLANKDATA-Struktur bei lpWaitForVerticalBlank sollte der Treiber die folgenden Schritte ausführen:

  • Wenn dwFlags DDWAITVB_I_TESTVB ist, sollte der Treiber die aktuelle vertikale Leerung status abfragen. Der Treiber sollte den bIsInVB-Member von DD_WAITFORVERTICALBLANKDATA auf TRUE festlegen, wenn sich der Monitor derzeit in einem vertikalen Leerzeichen befindet. Andernfalls sollte der Treiber bIsInVB auf FALSE festlegen.
  • Wenn dwFlags DDWAITVB_BLOCKBEGIN ist, sollte der Treiber blockieren und warten, bis ein vertikales Leerzeichen beginnt. Wenn ein vertikales Leerzeichen ausgeführt wird, wenn der Treiber den Block beginnt, sollte der Treiber warten, bis das nächste vertikale Leerzeichen beginnt, bevor er zurückgibt.
  • Wenn dwFlags DDWAITVB_BLOCKEND ist, sollte der Treiber blockieren und warten, bis ein vertikales Leerzeichen endet.
Wenn der Treiber die in dwFlags angegebene Aktion erfolgreich verarbeitet, sollte er DD_OK im ddRVal-Member von DD_WAITFORVERTICALBLANKDATA festlegen und DDHAL_DRIVER_HANDLED zurückgeben. Der Treiber sollte DDHAL_DRIVER_NOTHANDLED für die Flags zurückgeben, die er nicht verarbeiten kann.

DdWaitForVerticalBlank ermöglicht es einer Anwendung, sich mit dem vertikalen Leerungsintervall (VBI) zu synchronisieren.

HinweisDdWaitForVerticalBlank sollte niemals in eine Abfrageschleife eintreten, wenn der Monitorstromzustand dazu führt, dass der Treiber hängen bleibt. Beispielsweise kann eine Anwendung während des Herunterschaltens eines Monitors WaitForVerticalBlank aufrufen. Die DirectDraw-Runtime ruft den DdWaitForVerticalBlank-Einstiegspunkt des Anzeigetreibers auf, der wartet, bis sich der status ändert. Wenn der Monitor heruntergefahren wird, ändert sich dieser Wert nie - es sei denn, der Treiberschreiber bereitet sich auf dieses Szenario vor. Eine Lösung besteht darin, ein Timeout in die Abfrageschleife einzuschließen, während auf ein vertikales Leerzeichen gewartet wird. Der Permedia2-Beispieltreiber ist einfach so festgelegt, dass er überhaupt nicht abruft, wenn der Monitor heruntergefahren ist.

Es gibt auch ein Problem mit den WHQL Display Compatibility Tests (DCTs). Eines der DCTs für die Energieverwaltung schaltet den Monitor aus und ruft dann den vertikalen leeren status ab, und wartet darauf, dass es sich ändert. Wenn der Treiber immer den gleichen vertikalen leeren status meldet, wenn der Monitor heruntergefahren wird, hängt die Testanwendung auf, um darauf zu warten, dass sich das Ergebnis ändert. Dies wurde im Permedia2-Beispieltreiber behoben, indem während des Herunterfahrens des Monitors wechselnde Ergebnisse zurückgegeben wurden. Das heißt, wenn der DdWaitForVerticalBlank-Einstiegspunkt des Treibers zum ersten Mal mit dem DDWAIT_I_TESTVB-Flag aufgerufen wird (wenn der Monitor heruntergefahren wird), gibt er FALSE zurück, wenn er das nächste Mal TRUE, das nächste Mal FALSE usw. zurückgibt.

 

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile ddrawint.h (include Winddi.h)

Weitere Informationen

DD_WAITFORVERTICALBLANKDATA