PHP Conference Nagoya 2025

A classe EvTimer

(PECL ev >= 0.2.0)

Introdução

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.

Resumo da classe

class EvTimer extends EvWatcher {
/* Propriedades */
public $repeat;
public $remaining;
/* Propriedades herdadas */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* Métodos */
public __construct(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
)
public again(): void
final public static createStopped(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
): EvTimer
public set( float $after , float $repeat ): void
/* Métodos herdados */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

Propriedades

repeat

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.

remaining

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.

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top