« LuaSandbox::loadString
LuaSandbox::registerLibrary »

LuaSandbox::pauseUsageTimer

(PECL luasandbox >= 1.4.0)

LuaSandbox::pauseUsageTimer — Pause the CPU usage timer

説明

public function LuaSandbox::pauseUsageTimer(): bool

Pauses the CPU usage timer.

This only has effect when called from within a callback from Lua. When execution returns to Lua, the timer will be automatically unpaused. If a new call into Lua is made, the timer will be unpaused for the duration of that call.

If a PHP callback calls into Lua again with timer not paused, and then that Lua function calls into PHP again, the second PHP call will not be able to pause the timer. The logic is that even though the second PHP call would avoid counting the CPU usage against the limit, the first call still counts it.

パラメータ

この関数にはパラメータはありません。

戻り値

Returns a bool indicating whether the timer is now paused.

例

例1 Manipulating the usage timer

<?php

// create a new LuaSandbox and set a CPU limit
$sandbox = new LuaSandbox();
$sandbox->setCPULimit( 1 );

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

// Register a PHP callback
$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 "This should not time out...\n";
$sandbox->loadString( 'php.test()' )->call();

echo "This should time out.\n";
try {
    $sandbox->loadString( 'php.test2()' )->call();
    echo "It did not?\n";
} catch ( LuaSandboxTimeoutError $ex ) {
    echo "It did! " . $ex->getMessage() . "\n";
}

?>

上の例の出力は以下となります。

This should not time out...
This should time out.
It did! The maximum execution time for this script was exceeded

参考

関連キーワード:
timer   LuaSandbox   sandbox   call   usage   pauseUsageTimer   doWait   time out   Pause   loadString   callback   paused   unpauseUsageTimer   registerLibrary   execution   unpaused   calls   again   second   limit   setCPULimit   microtime   luasandbox   Pauses   effect
関連する関数・ページ:
luasandbox.unpauseusagetimer   luasandbox.examples-basic   luasandbox.setmemorylimit   luasandbox.examples   luasandbox.setcpulimit   luasandbox.loadstring