php原生定时扩展的使用(转载)

<?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=[];
        }
    }
}

  

posted @ 2018-11-26 10:34  王芬老师  阅读(277)  评论(0编辑  收藏  举报