php专区

 首页 > php专区 > PHP应用 > 常用功能 > php中pcntl_alarm为函数设置超时限制 - php高级应用

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

分享到:
【字体:
导读:
          原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(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. declare(ticks = 1); 
  2. function a() 
  3.     sleep(10); 
  4.     echo "a finishin"
  5. function b() 
  6.     echo "Stopn"
  7. function c() 
  8.     usleep(100000); 
  9.  
  10. function sig() 
  11.     throw new Exception; 
  12.  
  13. try 
  14.     //设置一个闹钟信号为一秒钟执行一次 
  15.     pcntl_alarm(1); 
  16.     //安装闹钟信号,并绑定callback 
  17.     pcntl_signal(SIGALRM, "sig"); 
  18.     a(); 
  19.     //取消闹钟信号 
  20.     pcntl_alarm(0); 
  21. catch(Exception $e
  22.     echo "timeoutn"
  23. b(); 
  24. a(); 
  25. 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 Base64编码文件二进制流主要使用 - p...
php Base64编码文件二进制流主要使用 Base64编码文件二进制流是使用base64_encode函数对文件二进制信息进行编码。 官方说明: base64_encode — 使用 MIME base64 对数据进行编码 Report a bug 说明 string base64_encode ( string $data ) 使用 base64 对 data 进行编码。 设计此种编...
php中实现api接口思路介绍 - php高级应用
php中实现api接口思路介绍 现在很流行api了,但各种api做法不一样,下面我整理了一些自己的想法,也是看了各大门户网站开放的api应用想到的,与大家分享分享,高手跳过。 API(Application Programming Interface,应用程序编程接口)在WEB应用中是非常常见的,比如开发微薄应用有微薄API,做淘宝...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……