Compartir a través de


PDD_WAITFORVERTICALBLANK función de devolución de llamada (ddrawint.h)

La función de devolución de llamada DdWaitForVerticalBlank devuelve el estado en blanco vertical del dispositivo.

Sintaxis

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

Parámetros

unnamedParam1

Apunta a una estructura de DD_WAITFORVERTICALBLANKDATA que contiene la información necesaria para obtener el estado en blanco vertical.

Valor devuelto

DdWaitForVerticalBlank devuelve uno de los siguientes códigos de devolución de llamada:

Comentarios

Según el valor del miembro dwFlags de la estructura de DD_WAITFORVERTICALBLANKDATA en lpWaitForVerticalBlank, el controlador debe hacer lo siguiente:

  • Si dwFlags está DDWAITVB_I_TESTVB, el controlador debe consultar el estado actual en blanco vertical. El controlador debe establecer el miembro bIsInVB de DD_WAITFORVERTICALBLANKDATA en TRUE si el monitor está actualmente en blanco vertical; de lo contrario, el controlador debe establecer bIsInVB en FALSE.
  • Si dwFlags está DDWAITVB_BLOCKBEGIN, el controlador debe bloquearse y esperar hasta que comience un espacio en blanco vertical. Si un espacio en blanco vertical está en curso cuando el controlador comienza el bloque, el controlador debe esperar hasta que comience el siguiente espacio en blanco vertical antes de volver.
  • Si dwFlags está DDWAITVB_BLOCKEND, el controlador debe bloquearse y esperar hasta que finalice un espacio en blanco vertical.
Cuando el controlador controla correctamente la acción especificada en dwFlags, debe establecer DD_OK en el miembro ddRVal de DD_WAITFORVERTICALBLANKDATA y devolver DDHAL_DRIVER_HANDLED. El controlador debe devolver DDHAL_DRIVER_NOTHANDLED para esas marcas que no es capaz de controlar.

DdWaitForVerticalBlank permite que una aplicación se sincronice con el intervalo de espacio en blanco vertical (VBI).

NotaDdWaitForVerticalBlank nunca debe entrar en un bucle de sondeo si el estado de alimentación del monitor hará que el controlador se bloquee. Por ejemplo, durante un apagado del monitor, una aplicación podría llamar a WaitForVerticalBlank. El tiempo de ejecución de DirectDraw llama al punto de entrada DdWaitForVerticalBlank del controlador de pantalla, que espera a que cambie el estado. Si el monitor está apagado, este valor nunca cambiará, a menos que el escritor de controladores se prepare para este escenario. Una solución consiste en incluir un tiempo de espera en el bucle de sondeo mientras se espera un espacio en blanco vertical. El controlador Permedia2 de ejemplo simplemente está configurado para no sondear en absoluto si el monitor está apagado.

También hay un problema con las pruebas de compatibilidad de pantalla (DCT) WHQL. Uno de los DCT para la administración de energía apaga el monitor y, a continuación, sondea el estado en blanco vertical, esperando a que cambie. Si el controlador siempre informa del mismo estado en blanco vertical cuando el monitor está apagado, la aplicación de prueba se bloqueará esperando a que el resultado cambie. Esto se ha corregido en el controlador de ejemplo Permedia2 devolviendo resultados alternativos mientras el monitor está apagado. Es decir, la primera vez que se llama al punto de entrada DdWaitForVerticalBlank del controlador con la marca DDWAIT_I_TESTVB (cuando el monitor está apagado), devuelve FALSE, la próxima vez que devuelve TRUE, la próxima vez que es FALSE, etc.

 

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado ddrawint.h (incluya Winddi.h)

Consulte también

DD_WAITFORVERTICALBLANKDATA