(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 laço, 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 laço
    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 laço 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.
      
