(PECL ev >= 0.2.0)
Os observadores EvTimer são temporizadores relativos simples que geram um evento após um determinado tempo e, opcionalmente, repetem-se em intervalos regulares depois disso.
Os cronômetros são baseados em tempo real, ou seja, se alguém registrar um evento que expire após uma hora e redefinir o relógio do sistema para janeiro do ano passado, o tempo limite ainda expirará após (aproximadamente) uma hora . "Aproximadamente" porque detectar saltos no tempo é difícil e algumas imprecisões são inevitáveis.
É garantido que o retorno de chamada seja invocado somente após o tempo limite ter passado (não em, portanto, em sistemas com relógios de resolução muito baixa, isso pode introduzir um pequeno atraso). Se vários temporizadores ficarem prontos durante a mesma iteração do loop, então aqueles com valores de tempo limite anteriores serão invocados antes daqueles de mesma prioridade com valores de tempo limite posteriores (mas isso não é mais verdade quando um retorno de chamada chama EvLoop:: execute() recursivamente).
O próprio cronômetro fará o melhor esforço para evitar desvios, ou seja, se um
cronômetro estiver configurado para disparar a cada
10
segundos, ele normalmente disparará exatamente em intervalos de
10
segundos. Se, no entanto, o script não conseguir acompanhar o cronômetro
porque leva mais do que esses
10
segundos para fazer isso, o cronômetro não será acionado mais de uma vez por iteração do loop
de eventos.
$after
,$repeat
,$callback
,$data
= null
,$priority
= 0
$after
,$repeat
,$callback
,$data
= null
,$priority
= 0
Se a repetição for
0.0
,
ela será interrompida automaticamente quando o tempo limite for atingido. Se
for positivo, o temporizador será automaticamente configurado para
disparar novamente a cada repetição, segundos depois, até ser interrompido manualmente.
Retorna o tempo restante até que um cronômetro seja acionado. Se o temporizador estiver ativo, esse tempo será relativo ao tempo atual do loop de eventos, caso contrário, será o valor de tempo limite atualmente configurado.
Isto é, depois de instanciar um
EvTimer
com um
valor after
de
5.0
e
um valor repeat
de
7.0
,
remaining
retorna
5.0
.
Quando o cronômetro for iniciado e um segundo passar,
remaining
retornará
4.0
.
Quando o cronômetro expirar e for reiniciado, ele retornará aproximadamente
7.0
(provavelmente um pouco menos, pois a invocação de retorno de chamada também leva algum tempo) e assim
por diante.