网站地图    收藏   

主页 > php专栏 > php应用 >

php中pcntl_alarm为函数设置超时限制 - php高级应用

来源:自学PHP网    时间:2014-11-27 22:16 作者: 阅读:

[导读] 原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(sig)会抛出一个异常,被外层代码捕获...

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

原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(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。

实例代码如下:

  1. <?php 
  2. declare(ticks = 1); 
  3. function a() 
  4.     sleep(10); 
  5.     echo "a finishin"
  6. function b() 
  7.     echo "Stopn"
  8. function c() 
  9.     usleep(100000); 
  10.  
  11. function sig() 
  12.     throw new Exception; 
  13.  
  14. try 
  15.     //设置一个闹钟信号为一秒钟执行一次 
  16.     pcntl_alarm(1); 
  17.     //安装闹钟信号,并绑定callback 
  18.     pcntl_signal(SIGALRM, "sig"); 
  19.     a(); 
  20.     //取消闹钟信号 
  21.     pcntl_alarm(0); 
  22. catch(Exception $e
  23.     echo "timeoutn"
  24. b(); 
  25. a(); 
  26. b(); 
附,pcntl扩展安装

pcntl扩展可以支持php的多线程操作,原本需要重新编译PHP的后面configrue提示加上--enable-pcntl,为了省事直接编译算鸟,代码如下:

  1. # cd /usr/local/src/php-5.2.6/ext/pcntl 
  2. # phpize 
  3. # ./configure --with-php-config=/usr/local/php/bin/php-config 
  4. # make && make install 
pcntl.so  加到php.ini中OK

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论