PHP 8.0.24 Released!

LuaSandbox::pauseUsageTimer

(PECL luasandbox >= 1.4.0)

LuaSandbox::pauseUsageTimerПриостанавливает таймер использования процессора

Описание

public LuaSandbox::pauseUsageTimer(): bool

Приостанавливает таймер использования процессора.

Имеет значение только при вызове из callback-функции Lua. Когда выполнение возвращается в Lua, таймер автоматически возобновляет работу. Если будет сделан новый вызов в Lua, таймер будет возобновлён на время этого вызова.

Если callback-функция PHP снова вызывает Lua с не приостановленным таймером, а затем эта функция Lua снова вызывает PHP, второй вызов PHP не сможет приостановить таймер. Логика заключается в том, что даже если второй вызов PHP не учитывает использование процессора в соответствии с ограничением, первый вызов все равно его считает.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает логическое значение (bool), указывающее, приостановлен ли таймер.

Примеры

Пример #1 Управление таймером использования

<?php

// создание нового LuaSandbox и установка лимита процессора
$sandbox = new LuaSandbox();
$sandbox->setCPULimit);

function 
doWait$t ) {
    
$end microtimetrue ) + $t;
    while ( 
microtimetrue ) < $end ) {
        
// waste CPU cycles
    
}
}

// регистрация новой callback-функции PHP
$sandbox->registerLibrary'php', [
    
'test' => function () use ( $sandbox ) {
        
$sandbox->pauseUsageTimer();
        
doWait);

        
$sandbox->unpauseUsageTimer();
        
doWait0.1 );
    },
    
'test2' => function () use ( $sandbox ) {
        
$sandbox->pauseUsageTimer();
        
$sandbox->unpauseUsageTimer();
        
doWait1.1 );
    }
] );

echo 
"Это не должно истекать...\n";
$sandbox->loadString'php.test()' )->call();

echo 
"Это должно истекать.\n";
try {
    
$sandbox->loadString'php.test2()' )->call();
    echo 
"Это не так?\n";
} catch ( 
LuaSandboxTimeoutError $ex ) {
    echo 
"Это так! " $ex->getMessage() . "\n";
}

?>

Результат выполнения данного примера:

Это не должно истекать...
Это должно истекать.
Это так! The maximum execution time for this script was exceeded

Смотрите также

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top