<?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