This component is responsible for creating timers and intervals.
Library is available as composer repository and can be installed using the following command in a root of your project.
composer require bic-engine/timer
There are two classes for creating deferred tasks:
Bic\Timer\Interval
- Runs the task continuously once in the allotted
time until the Interval
is stopped.Bic\Timer\Timer
- Executes a task deferred once after a certain amount
of time.To create a deferred task, it must be passed to the first argument of the constructor. The second argument is responsible for the time (in seconds) after which the task will be completed.
$timer = new Bic\Timer\Interval(function () {
echo "tick \n";
}, 4.5);
There are two ways to start the timer:
// 1) Blocking Mode
$timer->start();
// 2) Async Mode
$fiber = new \Fiber($timer->start(...));
$fiber->start();
while (!$fiber->isTerminated()) {
$fiber->resume(); // Execute the timer
}
{info} Please note that to run multiple timers, you should call them one by one.
$timer1 = new Bic\Timer\Interval(fn () => print "tick #1 \n", 1.5);
$fiber1 = new \Fiber($timer1->start(...));
$fiber1->start();
$timer2 = new Bic\Timer\Interval(fn () => print "tick #2 \n", 0.5);
$fiber2 = new \Fiber($timer2->start(...));
$fiber2->start();
$timers = [$fiber1, $fiber2];
while ($timers !== []) {
foreach ($timers as $index => $timer) {
if ($timer->isTerminated()) {
// Remove completed timer
unset($timers[$index]);
continue;
}
$timer->resume();
}
}