加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中pcntl_alarm为函数设定超时限制

发布时间:2022-01-20 15:36:01 所属栏目:PHP教程 来源:互联网
导读:原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(sig)会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时
  原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(sig)会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时钟信号,不会有异常抛出
 
  到php官方查看此函数说明
 
  pcntl_alarm (PHP 4 >= 4.3.0, PHP 5)
 
  pcntl_alarm — 为进程设置一个alarm闹钟信号
 
  说明¶int pcntl_alarm ( int $seconds )
 
  创建一个计时器,在指定的秒数后向进程发送一个SIGALRM信号。每次对 pcntl_alarm()的调用都会取消之前设置的alarm信号。
 
  参数¶seconds 等待的秒数。如果seconds设置为0,将不会创建alarm信号。
 
  返回值¶返回上次alarm调度(离alarm信号发送)剩余的秒数,或者之前没有alarm调度(译注:或者之前调度已完成) 时返回0。
 
  实例代码如下:
 
  <?php
  declare(ticks = 1);
  function a()
  {
      sleep(10);
      echo "a finishin";
  }
  function b()
  {
      echo "Stopn";
  }
  function c()
  {
      usleep(100000);
  }
  
  function sig()
  {
      throw new Exception;
  }
  
  try
  {
      //设置一个闹钟信号为一秒钟执行一次
      pcntl_alarm(1);
      //安装闹钟信号,并绑定callback
      pcntl_signal(SIGALRM, "sig");
      a();
      //取消闹钟信号
      pcntl_alarm(0);
  }
  catch(Exception $e)
  {
      echo "timeoutn";
  }
  b();
  a();
  b();
  附,pcntl扩展安装
  pcntl扩展可以支持php的多线程操作,原本需要重新编译PHP的后面configrue提示加上--enable-pcntl,为了省事直接编译算鸟,代码如下:
 
  # cd /usr/local/src/php-5.2.6/ext/pcntl
  # phpize
  # ./configure --with-php-config=/usr/local/php/bin/php-config
  # make && make install 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!