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 é decorrido. O valor do período de tempo pode ser negativo ou positivo da seguinte maneira:

  • Se o valor for negativo, o período de tempo será relativo ao tempo atual do sistema.
  • Se o valor for positivo, o período de tempo especifica um tempo absoluto (que na verdade é relativo a 1º de janeiro de 1601).

Aviso

Se você definir o UseHighResolutionTimer membro do WDF_TIMER_CONFIG para 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 alterações no tempo do sistema que podem 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.

Valor de retorno

WdfTimerStart retornará VERDADEIRO se o objeto do 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.

Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.

Observações

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 a hora especificada para o parâmetro dueTime do decorrido. Após essa primeira chamada, a estrutura chama a função de retorno de chamada sempre que o período de tempo especificado pelo Period membro da estrutura de WDF_TIMER_CONFIG do driver decorrido.

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, independentemente do valor especificado para DueTime.

Quando um driver chama WdfTimerStart, seu objeto de temporizador é adicionado à fila de objetos do 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á VERDADEIRO 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 passou (ou porque é um temporizador periódico). Antes de wdfTimerStart retorna 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 período de tempo decorrido.

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
da 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 de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte também

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop