neutron/tip-top

Tip-Top,一个用于设置超时和周期性定时器的库

0.2.0 2013-06-20 07:39 UTC

This package is auto-updated.

Last update: 2024-08-25 06:40:53 UTC


README

#TIP-TOP

Build Status

一个用于设置超时和周期性定时器的微型库。

$clock = new Clock();
// triggers a callback every second
$timer = $clock->addPeriodicTimer(1, function ($timer) {
    echo "BOOM ! I'm triggered every second !\n";
});

它使用了Evenement。大部分定时器代码是从ReactPHP的定时器实现中提取的。

Tip-Top !

安装

推荐使用 composer 来使用 tip-top。

{
    "require": {
        "neutron/tip-top": "0.2.*"
    }
}

免责声明

限制

  • Tip-Top 需要你在运行的脚本中声明滴答。
declare(ticks=1);
  • Tip-Top 可能无法按预期与阻塞调用一起工作(请在尝试之前先试试)

这是阻塞还是非阻塞IO?

TipTop 是非阻塞的,但它已被设计为支持一些阻塞调用。如果你使用如 sleep(5) 这样的阻塞调用,定时器和超时可能会稍后触发。

对于 sleep 的一个常见解决方案是迭代1秒的睡眠: for ($i=0; $i!=5; $i++;) {sleep(1);}

时钟有原子精度吗?

不幸的是,这个库是基于对pcntl_alarm 函数的hack。因此,时钟的分辨率是秒,并且每秒大约有0.001秒的位移。

这样的时钟有什么用例?

想想那些需要定期检查的长运行进程。

文档

API 浏览器.

示例

Neutron\TipTop\Clock 对象上主要有两种方法: addPeriodicTimeraddTimer

use Neutron\TipTop\Clock;

// mandatory for the clock to work
declare(ticks=1);

$clock = new Clock();

// triggers a callback every second
$timer = $clock->addPeriodicTimer(1, function ($timer) {
    echo "BOOM ! I'm triggered every second !\n";
});

// triggers a callback in 5 second
$timer = $clock->addTimer(5, function ($timer) {
    echo "BOOM ! I was planned 5 seconds ago !\n";
});

// removes all timers
$clock->clear();

移除定时器

你可以使用其 cancel 方法来移除定时器

use Neutron\TipTop\Clock;

// mandatory for the clock to work
declare(ticks=1);

$clock = new Clock();

$timer = $clock->addPeriodicTimer(1, function ($timer) {
    if ($stop) {
        $timer->cancel();
    }
});

清除所有定时器

你可能想要清除所有定时器

use Neutron\TipTop\Clock;

// mandatory for the clock to work
declare(ticks=1);

$clock = new Clock();

$timer = $clock->addPeriodicTimer(1, function ($timer) { echo "Hello"; });
$timer = $clock->addPeriodicTimer(1, function ($timer) { echo "Hello World"; });

// removes all timers
$clock->clear();

阻塞

有时你可能想要阻塞直到所有定时器都完成,使用 block 方法来做到这一点。

use Neutron\TipTop\Clock;

// mandatory for the clock to work
declare(ticks=1);

$clock = new Clock();

// echoes three times
$clock->addPeriodicTimer(1, function (signature) {
    echo "The block method blocks \n";
}, 3);

$clock->block();
echo "This line will be blocked until last timer executes

测试

Tip Top 是功能性且可以用 PHPUnit 单元测试的。为了在您的系统上运行测试,请确保使用 composer install --dev 安装开发依赖项,然后运行 bin/phpunit -c phpunit.xml.dist 以运行单元测试,或者运行 bin/phpunit -c phpunit-functional.xml.dist 以运行功能测试。

##许可

本项目采用 MIT 许可证