zoukankan      html  css  js  c++  java
  • php中pcntl_alarm为函数设置超时限制【转】

    来源:http://rango.swoole.com/archives/64
    原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(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 {
     5     sleep(10);
     6     echo "a finishi
    ";
     7 }
     8 function b()
     9 {
    10     echo "Stop
    ";
    11 }
    12 function c()
    13 {
    14     usleep(100000);
    15 }
    16 
    17 function sig()
    18 {
    19     throw new Exception;
    20 }
    21 
    22 try
    23 {
    24     pcntl_alarm(1);
    25     pcntl_signal(SIGALRM, "sig");
    26     a();
    27     pcntl_alarm(0);
    28 }
    29 catch(Exception $e)
    30 {
    31     echo "timeout
    ";
    32 }
    33 
    34 b();
    35 a();
    36 b();
  • 相关阅读:
    java中源代码和lib库中有包名和类名都相同的类(转)
    Python 入门之基本数据类型
    Python 学习经历分享
    String 与不可变对象
    String 的常用操作
    Java 中的国际化
    接口和工厂设计模式
    抽象类和模板设计模式
    Java中的访问控制权限
    Java 中类的初始化过程
  • 原文地址:https://www.cnblogs.com/lxdd/p/6016725.html
Copyright © 2011-2022 走看看