PDD_WAITFORVERTICALBLANK funzione di callback (ddrawint.h)

La funzione di callback DdWaitForVerticalBlank restituisce lo stato verticale vuoto del dispositivo.

Sintassi

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

Parametri

unnamedParam1

Punta a una struttura DD_WAITFORVERTICALBLANKDATA contenente le informazioni necessarie per ottenere lo stato vuoto verticale.

Valore restituito

DdWaitForVerticalBlank restituisce uno dei codici di callback seguenti:

Commenti

A seconda del valore del membro dwFlags della struttura DD_WAITFORVERTICALBLANKDATA in lpWaitForVerticalBlank, il driver deve eseguire le operazioni seguenti:

  • Se dwFlags è DDWAITVB_I_TESTVB, il driver deve eseguire una query sullo stato di spaziatura verticale corrente. Il driver deve impostare il membro bIsInVB di DD_WAITFORVERTICALBLANKDATA su TRUE se il monitor è attualmente in uno spazio vuoto verticale; in caso contrario, il driver deve impostare bIsInVB su FALSE.
  • Se dwFlags è DDWAITVB_BLOCKBEGIN, il driver deve bloccare e attendere l'inizio di un vuoto verticale. Se un campo vuoto verticale è in corso quando il driver inizia il blocco, il driver deve attendere l'inizio del successivo vuoto verticale prima di tornare.
  • Se dwFlags è DDWAITVB_BLOCKEND, il driver deve bloccarsi e attendere fino a quando non termina un vuoto verticale.
Quando il driver gestisce correttamente l'azione specificata in dwFlags, deve impostare DD_OK nel membro ddRVal di DD_WAITFORVERTICALBLANKDATA e restituire DDHAL_DRIVER_HANDLED. Il driver deve restituire DDHAL_DRIVER_NOTHANDLED per i flag che non è in grado di gestire.

DdWaitForVerticalBlank consente a un'applicazione di sincronizzarsi con l'intervallo di spaziatura verticale (VBI).

NotaDdWaitForVerticalBlank non dovrebbe mai immettere un ciclo di polling se lo stato di alimentazione del monitoraggio causerà il blocco del driver. Ad esempio, durante l'accensione di un monitoraggio, un'applicazione potrebbe chiamare WaitForVerticalBlank. Il runtime DirectDraw chiama il punto di ingresso DdWaitForVerticalBlank del driver di visualizzazione, che attende la modifica dello stato. Se il monitoraggio è spento, questo valore non cambierà mai, a meno che il writer del driver non si prepari per questo scenario. Una soluzione consiste nell'includere un timeout nel ciclo di polling in attesa di uno spazio vuoto verticale. Il driver Permedia2 di esempio è semplicemente impostato per non eseguire il polling se il monitoraggio è spento.

Si è verificato anche un problema con i test di compatibilità della visualizzazione WHQL (DCT). Uno dei controller di dominio per il risparmio energia riduce il monitor e quindi esegue il polling dello stato vuoto verticale, in attesa che cambi. Se il driver segnala sempre lo stesso stato verticale vuoto quando il monitoraggio viene spento, l'applicazione di test si blocca in attesa della modifica del risultato. Questo problema è stato risolto nel driver di esempio Permedia2 restituendo risultati alternati mentre il monitor è spento. Ovvero, la prima volta che il punto di ingresso DdWaitForVerticalBlank del driver viene chiamato con il flag di DDWAIT_I_TESTVB (quando il monitor è spento), restituisce FALSE, la volta successiva che restituisce TRUE, la volta successiva FALSE e così via.

 

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione ddrawint.h (include Winddi.h)

Vedi anche

DD_WAITFORVERTICALBLANKDATA