int \Workerman\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
定期執行某個函數或者類方法。
注意:定時器是在當前進程中運行的,workerman中不會創建新的進程或者線程去運行定時器。
參數
time_interval
多長時間執行一次,單位秒,支持小數,可以精確到0.001,即精確到毫秒級別。
callback
回調函數注意:如果回調函數是類的方法,則方法必須是public屬性
args
回調函數的參數,必須為陣列,陣列元素為參數值
persistent
是否是持久的,如果只想定時執行一次,則傳遞false(只執行一次的任務在執行完畢後會自動銷毀,不必調用Timer::del()
)。默認是true,即一直定時執行。
返回值
返回一個整數,代表計時器的timerid,可以通過調用Timer::del($timerid)
銷毀這個計時器。
示例
1、定時函數為匿名函數(閉包)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$task = new Worker();
// 開啟多少個進程運行定時任務,注意業務是否在多進程有並發問題
$task->count = 1;
$task->onWorkerStart = function(Worker $task)
{
// 每2.5秒執行一次
$time_interval = 2.5;
Timer::add($time_interval, function()
{
echo "task run\n";
});
};
// 運行worker
Worker::runAll();