<?php
class Timer{
//静态数组保存定时任务;
protected static $task=[];
//间隔时间;
protected static $time=[];
//开启服务
public static function run(){
if($time){
self::$time=$time;
}
self::installHandler();
pcntl_alarm(1);
}
//注册信号处理函数;
public static function installHandler(){
pcntl_alarm(SIGALRM,[‘Timer‘,‘signalHandler‘]);
}
//信号处理函数;
public function signalHandler(){
self::task();
pcntl_alarm(self::$time);
}
//执行回调函数;
public static function task(){
if(empty(self::$task)){
return "";
}
foreach(self::$task as $time=>$arr){
//遍历每一个
foreach($arr as $k=>$job){
$func=$job[‘func‘];
$parm=$job[‘parm‘];
$inter=$job[‘inter‘];
$persist=$job[‘persist‘];
}
if($current==$time){
//调用回调函数,传递参数;
call_user_func_array($func, $parm);
//删除任务
unset(self::$task[$time][$k]);
}
if($persist){
//持久化
self::$task[$inter+$current]=$job;
}
}
public static function add($inter,$func,$parm=[],$persist){
if(empty($inter)){
return ;
}
$time=time()+$inter;
//写入定时任务;
self::$task[$time][]=[‘func‘=>$func,‘parm‘=>$parm,‘inter‘=>$inter,‘persist‘=>$persist];
}
public function dell(){
self::$task=[];
}
}
}
原文:https://www.cnblogs.com/wangfenphph2/p/10018977.html