当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-02-11 16:01:51 浏览: 评论:0 

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

Tags: pcntlalarm 函数 设置 超时限制

分享到: