(PECL luasandbox >= 1.4.0)
LuaSandbox::pauseUsageTimer — Приостанавливает таймер использования процессора
Приостанавливает таймер использования процессора.
Имеет значение только при вызове из callback-функции Lua. Когда выполнение возвращается в Lua, таймер автоматически возобновляет работу. Если будет сделан новый вызов в Lua, таймер будет возобновлён на время этого вызова.
Если callback-функция PHP снова вызывает Lua с не приостановленным таймером, а затем эта функция Lua снова вызывает PHP, второй вызов PHP не сможет приостановить таймер. Логика заключается в том, что даже если второй вызов PHP не учитывает использование процессора в соответствии с ограничением, первый вызов все равно его считает.
Сигнатура функции не содержит параметров.
Возвращает логическое значение (bool), указывающее, приостановлен ли таймер.
Пример #1 Управление таймером использования
<?php
// создание нового LuaSandbox и установка лимита процессора
$sandbox = new LuaSandbox();
$sandbox->setCPULimit( 1 );
function doWait( $t ) {
    $end = microtime( true ) + $t;
    while ( microtime( true ) < $end ) {
        // waste CPU cycles
    }
}
// регистрация новой callback-функции PHP
$sandbox->registerLibrary( 'php', [
    'test' => function () use ( $sandbox ) {
        $sandbox->pauseUsageTimer();
        doWait( 5 );
        $sandbox->unpauseUsageTimer();
        doWait( 0.1 );
    },
    'test2' => function () use ( $sandbox ) {
        $sandbox->pauseUsageTimer();
        $sandbox->unpauseUsageTimer();
        doWait( 1.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
