(PECL ev >= 0.2.0)
Наблюдатели EvTimer — обычные относительные таймеры, которые создают событие через заданное время и, опционально, периодически повторяют его через заданные интервалы времени.
Таймеры базируются на реальном времени, то есть если задать таймер с повторами раз в час и сбросить системные часы на Январь прошлого года, то таймер будет все также срабатывать через (примерно) час. «Примерно» потому, что обнаружить скачки во времени сложно, а отдельные неточности неизбежны.
Callback-функция гарантированно запустится только после того, как пройдёт превышение заданного времени ожидания (не ровно в тот же момент, т. к. на системах с часами с низким разрешением могут наблюдаться небольшие задержки). Если несколько таймеров будут готовы сработать в одну и ту же итерацию событийного цикла, то callback-функции наблюдателей будут запущены в порядке времени срабатывания и с учётом приоритета (но это не работает, если callback-функции вызывают метод EvLoop::run() рекурсивно).
    Сами по себе таймеры стараются всеми силами избежать накапливания ошибки,
    то есть если таймер сконфигурирован срабатывать каждые
    10 секунд, то обычно он срабатывает точно
    с 10 секундным интервалом. Однако, если
    скрипт не поспевает за таймером, поскольку его работа занимает более
    10 секунд, то таймер сработает не чаще чем один раз
    за итерацию событийного цикла.
   
$after
   ,$repeat
   ,$callback
   ,$data
     = null
   ,$priority
     = 0
   $after
   ,$repeat
   ,$callback
   ,$data
     = null
   ,$priority
     = 0
   
       Если равно 0.0, то таймер автоматически остановится,
       когда будет превышено время ожидания. Если больше нуля, то таймер автоматически
       перейдёт в режим бесконечного повторения через заданные интервалы, пока
       его не остановят самостоятельно.
      
Возвращает время, оставшееся до срабатывания таймера. Если таймер активен, то это время будет считаться относительно времени текущего событийного цикла, а если таймер неактивен, то оно будет равно сконфигурированному значению времени ожидания.
       То есть, после создания экземпляра
       EvTimer с параметром after со значением
       5.0 и параметром repeat
       со значением 7.0, remaining
       вернёт 5.0. Когда таймер запустится и пройдёт 1 секунда,
       remaining вернёт 4.0.
       Когда таймер истечёт и будет перезапущен, он вернёт «примерно»
       7.0 (обычно чуть меньше, потому что запуск callback-функции занимает время)
       и т. д.