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

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top