用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

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

时间:2015-01-23  来源:西部数据  作者:西部数据

原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(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
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门