(PECL ev >= 0.2.0)
Os observadores periódicos também são uma espécie de cronômetros, mas são muito versáteis.
Ao contrário do EvTimer , os observadores EvPeriodic não são baseados em tempo real (ou tempo relativo, o tempo físico que passa), mas no tempo do relógio de parede (tempo absoluto, calendário ou relógio). A diferença é que o tempo do relógio de parede pode ser mais rápido ou mais lento que o tempo real, e os saltos no tempo não são incomuns (por exemplo, ao ajustá-lo).
O observador EvPeriodic p
ode ser configurado para ser acionado após algum momento específico.
Por exemplo, se um
observador EvPeriodic
estiver configurado para acionar
"em 10 segundos"
(por exemplo,
EvLoop::now()
+
10.0
,
ou seja, um tempo absoluto, não um atraso), e o relógio do sistema for redefinido para
janeiro do ano anterior,
então levará um ano ou mais para acionar o evento (diferentemente de um
EvTimer,
que ainda seria acionado aproximadamente
10
segundos após iniciá-lo, pois usa um tempo limite relativo).
Assim como com os temporizadores, é garantido que o retorno de chamada seja invocado somente quando o momento em que ele deveria ser acionado tiver passado. 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 com valores de tempo limite posteriores (mas isso não é mais verdade quando um retorno de chamada chama EvLoop::run() recursivamente).
$offset
,$interval
,$reschedule_cb
,$callback
,$data
= null
,$priority
= 0
$offset
,$interval
,$reschedule_cb
,$callback
,$data
= null
,$priority
= 0
Ao repetir, contém o valor de deslocamento, caso contrário, este é o ponto absoluto no tempo (o valor de deslocamento passado para EvPeriodic::set(), embora libev possa modificar este valor para melhor estabilidade numérica).
O valor do intervalo atual. Pode ser modificado a qualquer momento, mas as alterações só terão efeito quando o cronômetro periódico for acionado ou EvPeriodic::again() estiver sendo chamado.