Compartilhar via


Função ExSetTimer (wdm.h)

A rotina ExSetTimer inicia uma operação de temporizador e define o temporizador a expirar no devido tempo especificado.

Sintaxe

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

Parâmetros

[in] Timer

Um ponteiro para uma estrutura EX_TIMER. Essa estrutura é um objeto de temporizador que foi alocado anteriormente pela rotina ExAllocateTimer.

[in] DueTime

O tempo absoluto ou relativo em que o temporizador deve expirar. Se o valor do parâmetro DueTime for negativo, o tempo de expiração será relativo ao tempo atual do sistema. Caso contrário, o tempo de expiração será absoluto. O tempo de expiração é expresso em unidades de tempo do sistema (intervalos de 100 nanossegundos). Os tempos de expiração absolutos acompanham as alterações na hora do sistema; os tempos de expiração relativos não são afetados pelas alterações de tempo do sistema. Um tempo absoluto é expresso conforme o tempo passado, em unidades de tempo do sistema, desde o início do ano 1601.

O parâmetro DueTime para um temporizador de alta resolução deve ser um tempo relativo (valor negativo) ou verificações de bug de rotina.

[in] Period

Um período opcional para o temporizador em unidades de tempo do sistema (intervalos de 100 nanossegundos). Deve ser menor ou igual a MAXLONG. Para um temporizador que seja único em vez de periódico, defina Período como zero.

[in, optional] Parameters

Um ponteiro para uma estrutura EXT_SET_PARAMETERS. O driver de chamada anteriormente chamado ExInitializeSetTimerParameters rotina para inicializar essa estrutura.

Valor de retorno

Essa rotina retornará VERDADEIRO se cancelar um temporizador pendente no momento em que a rotina foi chamada. Caso contrário, a rotina retornará FALSE . Para obter mais informações, consulte Comentários.

Observações

Seu driver pode chamar essa rotina para definir um temporizador para expirar em um momento futuro. Em seguida, o driver pode aguardar a expiração do temporizador. Ou, o driver pode implementar uma rotina de retorno de chamada que é chamada quando o temporizador expira.

Depois que um driver chama ExSetTimer, o driver pode chamar uma rotina como KeWaitForSingleObject ou KeWaitForMultipleObjects aguardar a expiração do temporizador. Quando o temporizador expira, o sistema operacional sinaliza o objeto de temporizador.

Como opção, o driver pode implementar um exTimerCallback rotina de retorno de chamada e fornecer um ponteiro para essa rotina como um parâmetro de entrada para a rotina ExAllocateTimer. Quando o temporizador expira, o sistema operacional chama a rotina exTimerCallback.

Uma chamada ExSetTimer cancela implicitamente qualquer operação de temporizador de conjunto iniciada anteriormente no objeto de temporizador especificado pelo Timer. Se o driver chamado anteriormente ExSetTimer para definir um temporizador que usa timer, e esse temporizador ainda não tiver expirado quando exSetTimer for chamado uma segunda vez, a segunda chamada cancelará o temporizador da primeira chamada e iniciará o novo temporizador. Nesse caso, a segunda chamada retorna VERDADEIRO. No entanto, se o temporizador iniciado pela primeira chamada expirar antes que a segunda chamada possa cancelar esse temporizador, a segunda chamada iniciará o novo temporizador e retornará FALSE.

Se o parâmetro Period for diferente de zero, o temporizador será periódico. Para um temporizador periódico, o parâmetro DueTime especifica a hora da expiração do temporizador inicial e Período especifica o intervalo entre expirações subsequentes.

O temporizador de hardware usado para o relógio do sistema sinaliza solicitações de interrupção em intervalos uniformes, mas o tratamento dessas interrupções pode ser adiado pelo processamento de interrupção para outros dispositivos. Assim, para um temporizador periódico, o atraso de um tempo de expiração periódico até o momento em que o objeto de temporizador é sinalizado ou o ExTimerCallback execuções de rotina podem variar de um período para o outro. Para obter mais informações, consulte de Precisão do Temporizador.

Um temporizador periódico não pode expirar mais de uma vez por tique de relógio do sistema. Definir o período de um temporizador como um valor menor do que o intervalo entre tiques de relógio do sistema não faz com que o temporizador expire mais de uma vez por tique de relógio do sistema, mas pode fazer com que os intervalos entre expirações sucessivas variem se a taxa do relógio do sistema mudar. Por exemplo, o sistema operacional pode aumentar temporariamente a taxa de relógio do sistema para atender aos requisitos de tempo de um temporizador de alta resolução. Para obter mais informações, consulte High-Resolution Timers.

Para um temporizador periódico que não é um temporizador de alta resolução, um driver pode obter expirações periódicas relativamente uniformes definindo Período para um múltiplo inteiro do intervalo padrão entre tiques de relógio do sistema.

Para evitar o consumo excessivo de energia, um driver não deve definir o período de um temporizador de alta resolução de longa execução como um valor menor que o intervalo padrão entre tiques de relógio do sistema. Caso contrário, o temporizador do relógio do sistema gerará continuamente interrupções na taxa máxima de relógio do sistema permitida.

Para obter mais informações, consulte rotinas exXxxTimer e objetos EX_TIMER .

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 8.1.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

Consulte também

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject