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( 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

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

add a note add a note

User Contributed Notes

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