Compartilhar via


Função WdfTimerStart (wdftimer.h)

[Aplica-se a KMDF e UMDF]

O método WdfTimerStart inicia o relógio de um temporizador.

Sintaxe

BOOLEAN WdfTimerStart(
  [in] WDFTIMER Timer,
  [in] LONGLONG DueTime
);

Parâmetros

[in] Timer

Um identificador para um objeto de temporizador de estrutura que foi obtido chamando WdfTimerCreate.

[in] DueTime

Um período de tempo, em unidades de tempo do sistema (intervalos de 100 nanossegundos). A estrutura chama a função de retorno de chamada EvtTimerFunc do driver quando o período de tempo especificado decorre. O valor do período de tempo pode ser negativo ou positivo da seguinte maneira:

  • Se o valor for negativo, o período será relativo à hora atual do sistema.
  • Se o valor for positivo, o período especificará uma hora absoluta (que na verdade é relativa a 1º de janeiro de 1601).

Aviso

Se você definir o membro UseHighResolutionTimer de WDF_TIMER_CONFIG como WdfTrue, deverá chamar WdfTimerStart com o parâmetro DueTime definido como um valor negativo. Caso contrário, a chamada fará com que o sistema falhe.

Os tempos relativos não são afetados por nenhuma alteração no tempo do sistema que possa ocorrer dentro do período de tempo especificado. Os tempos absolutos refletem as alterações de tempo do sistema.

A estrutura fornece funções de conversão de tempo que convertem valores de tempo em unidades de tempo do sistema.

Retornar valor

WdfTimerStart retornará TRUE se o objeto de temporizador estiver na fila do temporizador do sistema. Caso contrário, esse método retornará FALSE. Para obter mais informações, consulte a seção Comentários a seguir.

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

Os drivers sempre devem chamar WdfTimerStart para iniciar um temporizador depois de criá-lo, independentemente de o temporizador ser um temporizador periódico ou não.

Depois que um driver chama WdfTimerStart, a estrutura chama a função de retorno de chamada EvtTimerFunc do driver quando o tempo especificado para o parâmetro DueTime passa. Após essa primeira chamada, a estrutura chama a função de retorno de chamada sempre que o período de tempo especificado pelo membro Period da estrutura WDF_TIMER_CONFIG do driver decorre.

A expiração do temporizador depende, em última análise, da granularidade do relógio do sistema. O valor especificado para DueTime garante que a estrutura chame a função de retorno de chamada EvtTimerFunc do driver em ou após o DueTime fornecido. No entanto, WdfTimerStart não pode substituir a granularidade do relógio do sistema, seja qual for o valor especificado para DueTime.

Quando um driver chama WdfTimerStart, seu objeto de temporizador é adicionado à fila de objetos de temporizador do sistema. Se o temporizador não for um temporizador periódico, o sistema removerá o objeto de temporizador da fila depois que o "tempo de conclusão" do temporizador tiver decorrido. Se o temporizador for um temporizador periódico, o objeto de temporizador permanecerá na fila até que o driver chame WdfTimerStop.

Um driver pode chamar WdfTimerStart de sua função de retorno de chamada EvtTimerFunc para reiniciar um temporizador não periódico depois que ele expirar.

WdfTimerStart retornará TRUE se o driver tiver chamado anteriormente WdfTimerStart e o objeto de temporizador ainda estiver na fila do sistema porque o período de tempo não tiver decorrido (ou porque é um temporizador periódico). Antes que WdfTimerStart retorne TRUE, o sistema operacional redefine o período de tempo para o valor especificado pelo driver na nova chamada para WdfTimerStart. A estrutura chama a função de retorno de chamada EvtTimerFunc somente após o término do novo período de tempo.

Para parar o relógio do temporizador, o driver pode chamar WdfTimerStop.

Para obter mais informações sobre objetos de temporizador de estrutura, consulte Usando temporizadores.

Exemplos

O exemplo de código a seguir inicia um temporizador. A estrutura chamará a função de retorno de chamada EvtTimerFunc do temporizador após 10 milissegundos.

BOOLEAN inTimerQueue;

inTimerQueue = WdfTimerStart(
                             timerHandle,
                             WDF_REL_TIMEOUT_IN_MS(10)
                             );

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho wdftimer.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Regras de conformidade da DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop