# La clase EvTimer

(PECL ev >= 0.2.0)

## Introducción

Los observadores EvTimer son observadores relativamente simples que generan un evento después de un tiempo especificado y, opcionalmente, se repiten a intervalos regulares.

Los temporizadores se basan en tiempo real, por lo que si un temporizador programa un evento que finaliza después de una hora y se reinicia el reloj del sistema a enero del año pasado, volverá a estar fuera de tiempo después de una hora (aproximadamente). "Aproximadamente" porque la detección de saltos en el tiempo es difícil y ciertas inexactitudes son inevitables.

Se garantiza que la función de retrollamada se llamará solo después de que expire el tiempo de espera máximo (y no exactamente en ese momento preciso, por lo que en sistemas con una resolución de reloj baja, puede introducirse un pequeño retraso). Si varios temporizadores están listos durante la misma iteración del bucle, el que tenga el valor de tiempo de espera máximo más cercano se invocará antes que otro con la misma prioridad pero con un valor de tiempo de espera más lejano (aunque esto ya no es cierto cuando una función de retrollamada llama recursivamente al método EvLoop::run()).

El temporizador en sí hará todo lo posible para no derivar, pero si un temporizador está configurado para ejecutarse cada `10` segundos, entonces normalmente se ejecutará exactamente cada `10` segundos. Sin embargo, si el script no puede mantener el temporizador porque tarda más que sus `10` segundos, el temporizador no podrá ejecutarse más de una vez por iteración del bucle de eventos.

## Sinopsis de la Clase

class EvTimer extends EvWatcher {
/* Propiedades */
public $repeat;
public $remaining;
/* Propiedades heredadas */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* Métodos */
public function __construct(
float `$after` ,
float `$repeat` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
)
public function again(): void
final public static function createStopped(
float `$after` ,
float `$repeat` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
): EvTimer
public function set( float `$after` , float `$repeat` ): void
/* Métodos heredados */
public function EvWatcher::clear(): int
public function EvWatcher::feed( int `$revents` ): void
public function EvWatcher::getLoop(): EvLoop
public function EvWatcher::invoke( int `$revents` ): void
public function EvWatcher::keepalive( bool `$value` = ?): bool
public function EvWatcher::setCallback( callable `$callback` ): void
public function EvWatcher::start(): void
public function EvWatcher::stop(): void
}

## Propiedades

repeat
  Si esta propiedad vale `0.0`, entonces se detendrá automáticamente una vez alcanzado el tiempo de espera máximo. Si es positivo, entonces el temporizador se configurará automáticamente para ejecutarse cada segundo siguiente, hasta que no se detenga manualmente.
remaining
  Devuelve el tiempo restante antes de que el temporizador se ejecute. Si el temporizador está activo, entonces este tiempo será relativo al tiempo del bucle de eventos actual, de lo contrario, será relativo al valor del tiempo de espera máximo configurado actualmente. Asimismo, después de instanciar un EvTimer con un valor de `after` en `5.0` y un valor de `repeat` en `7.0`, remaining devolverá `5.0`. Cuando el temporizador se inicia y pasa un segundo, remaining devolverá `4.0`. Cuando el temporizador expire y se reinicie, devolverá aproximadamente `7.0` (probablemente un poco menos, ya que la invocación de la función de retrollamada también lleva algo de tiempo), y así sucesivamente.

## Tabla de contenidos

- EvTimer::again — Reinicia el watcher Timer
- EvTimer::__construct — Construye un objeto EvTimer watcher
- EvTimer::createStopped — Crea un objeto EvTimer watcher detenido
- EvTimer::set — Configura el observador

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open