Поделиться через


функция обратного вызова PDD_WAITFORVERTICALBLANK (ddrawint.h)

Функция обратного вызова DdWaitForVerticalBlank возвращает вертикальное пустое состояние устройства.

Синтаксис

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

Параметры

unnamedParam1

Указывает на структуру DD_WAITFORVERTICALBLANKDATA , содержащую сведения, необходимые для получения вертикального пустого состояния.

Возвращаемое значение

DdWaitForVerticalBlank возвращает один из следующих кодов обратного вызова:

Комментарии

В зависимости от значения члена dwFlags структуры DD_WAITFORVERTICALBLANKDATA в lpWaitForVerticalBlank драйвер должен выполнить следующие действия:

  • Если dwFlags DDWAITVB_I_TESTVB, драйвер должен запросить текущее состояние вертикального пробела. Драйвер должен задать для элемента bIsInVB DD_WAITFORVERTICALBLANKDATA значение TRUE , если монитор в настоящее время находится в вертикальном пустом месте; В противном случае драйвер должен задать для bIsInVBзначение FALSE.
  • Если dwFlags DDWAITVB_BLOCKBEGIN, драйвер должен блокировать и ждать, пока не начнется вертикальное пустое. Если выполняется вертикальное пустое поле, когда драйвер начинает блок, драйвер должен подождать, пока не начнется следующее вертикальное пустое, прежде чем вернуться.
  • Если dwFlags DDWAITVB_BLOCKEND, драйвер должен заблокировать и дождаться завершения вертикального пустого поля.
Когда драйвер успешно обрабатывает действие, указанное в dwFlags, он должен задать DD_OK в элементе ddRVal DD_WAITFORVERTICALBLANKDATA и вернуть 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