萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中pcntl_alarm為函數設置超時限制

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。


實例

 代碼如下 復制代碼

<?php
declare(ticks = 1);
function a()
{
    sleep(10);
    echo "a finishin";
}
function b()
{
    echo "Stopn";
}
function c()
{
    usleep(100000);
}
 
function sig()
{
    throw new Exception;
}
 
try
{
    //設置一個鬧鐘信號為一秒鐘執行一次
    pcntl_alarm(1);
    //安裝鬧鐘信號,並綁定callback
    pcntl_signal(SIGALRM, "sig");
    a();
    //取消鬧鐘信號
    pcntl_alarm(0);
}
catch(Exception $e)
{
    echo "timeoutn";
}
 
b();
a();
b();


附,pcntl擴展安裝

pcntl擴展可以支持php的多線程操作.

原本需要重新編譯PHP的後面configrue提示加上--enable-pcntl

為了省事直接編譯算鳥.

 代碼如下 復制代碼 # cd /usr/local/src/php-5.2.6/ext/pcntl
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install

pcntl.so  加到php.ini中OK

copyright © 萬盛學電腦網 all rights reserved