LuaSandbox::pauseUsageTimer

(PECL luasandbox >= 1.4.0)

LuaSandbox::pauseUsageTimerPausa o cronômetro de uso da CPU

Descrição

public LuaSandbox::pauseUsageTimer(): bool

Pausa o cronômetro de uso da CPU.

Isso só tem efeito quando chamado de dentro de uma função de retorno de Lua. Quando a execução retorna para Lua, o cronômetro será automaticamente retomado. Se uma nova chamada para Lua for feita, o cronômetro será retomado pela duração dessa chamada.

Se uma função de retorno do PHP chamar Lua novamente com o cronômetro não pausado, e então essa função Lua chamar o PHP novamente, a segunda chamada do PHP não será capaz de pausar o cronômetro. A lógica é que mesmo que a segunda chamada do PHP evite contar o uso da CPU em relação ao limite, a primeira chamada ainda conta.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna um bool indicando se o cronômetro está pausado.

Exemplos

Exemplo #1 Manipulando o cronômetro de uso

<?php

// Cria um novo LuaSandbox e define um limite de CPU
$sandbox = new LuaSandbox();
$sandbox->setCPULimit( 1 );

function
doWait( $t ) {
$end = microtime( true ) + $t;
while (
microtime( true ) < $end ) {
// gasta ciclos da CPU
}
}

// Registra uma função de retorno do 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
"Isso não deve expirar...\n";
$sandbox->loadString( 'php.test()' )->call();

echo
"Isso deve expirar.\n";
try {
$sandbox->loadString( 'php.test2()' )->call();
echo
"Não expirou?\n";
} catch (
LuaSandboxTimeoutError $ex ) {
echo
"Foi o que aconteceu! " . $ex->getMessage() . "\n";
}

?>

O exemplo acima produzirá:

Isso não deve expirar...
Isso deve expirar.
Foi o que aconteceu! The maximum execution time for this script was exceeded

Veja Também