International PHP Conference Munich 2025

LuaSandbox::pauseUsageTimer

(PECL luasandbox >= 1.4.0)

LuaSandbox::pauseUsageTimerPausa el temporizador de uso de la CPU

Descripción

public LuaSandbox::pauseUsageTimer(): bool

Pausa el temporizador de uso de la CPU.

Esto solo tiene efecto cuando se llama desde una retrollamada de Lua. Cuando la ejecución vuelve a Lua, el temporizador se reiniciará automáticamente. Si se realiza una nueva llamada a Lua, el temporizador se reiniciará durante la duración de esa llamada.

Si una retrollamada PHP llama nuevamente a Lua con el temporizador sin pausar, y esa función Lua llama nuevamente a PHP, la segunda llamada PHP no podrá pausar el temporizador. La lógica es que incluso si la segunda llamada PHP evita contar el uso de la CPU contra el límite, la primera llamada sigue contándolo.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve un bool indicando si el temporizador está ahora en pausa.

Ejemplos

Ejemplo #1 Manipulando el temporizador de uso

<?php

// Crear un nuevo LuaSandbox y definir un límite de CPU
$sandbox = new LuaSandbox();
$sandbox->setCPULimit( 1 );

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

// Registrar una función de retrollamada 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
"Esto no debería agotar el tiempo...\n";
$sandbox->loadString( 'php.test()' )->call();

echo
"Esto debería agotar el tiempo.\n";
try {
$sandbox->loadString( 'php.test2()' )->call();
echo
"¿No lo hizo?\n";
} catch (
LuaSandboxTimeoutError $ex ) {
echo
"¡Lo hizo! " . $ex->getMessage() . "\n";
}

?>

El resultado del ejemplo sería:

Esto no debería agotar el tiempo...
Esto debería agotar el tiempo.
¡Lo hizo! El tiempo máximo de ejecución para este script fue excedido

Ver también

add a note

User Contributed Notes

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