public function add(TimerInterface $timer) { $interval = $timer->getInterval(); $scheduledAt = $interval + $this->getTime(); $this->timers->attach($timer, $scheduledAt); $this->scheduler->insert($timer, -$scheduledAt); }
public function add(TimerInterface $timer) { $interval = $timer->getInterval(); if ($interval < self::MIN_RESOLUTION) { throw new InvalidArgumentException('Timer events do not support sub-millisecond timeouts.'); } $scheduledAt = $interval + $this->getTime(); $this->timers->attach($timer, $scheduledAt); $this->scheduler->insert($timer, -$scheduledAt); }
/** * Schedule a timer for execution. * * @param TimerInterface $timer */ private function scheduleTimer(TimerInterface $timer) { $flags = Event::TIMEOUT; if ($timer->isPeriodic()) { $flags |= Event::PERSIST; } $event = new Event($this->eventBase, -1, $flags, $this->timerCallback, $timer); $this->timerEvents[$timer] = $event; $event->add($timer->getInterval()); }
private function setupTimer(TimerInterface $timer) { $dummyCallback = function () { }; $interval = $timer->getInterval(); if ($timer->isPeriodic()) { $libevTimer = new \libev\TimerEvent($dummyCallback, $interval, $interval); } else { $libevTimer = new \libev\TimerEvent($dummyCallback, $interval); } $libevTimer->setCallback(function () use($timer) { call_user_func($timer->getCallback(), $timer); if (!$timer->isPeriodic()) { $timer->cancel(); } }); $this->timers->attach($timer, $libevTimer); $this->loop->add($libevTimer); return $timer; }
/** * @return float */ public function getInterval() { return $this->timer->getInterval(); }