LuaSandbox LuaSandbox::pauseUsageTimer

(PECL luasandbox >= 1.4.0)

LuaSandbox::pauseUsageTimer — CPU 사용 타이머 일시 중지


설명

public LuaSandbox::pauseUsageTimer(): bool

CPU 사용 타이머를 일시 중지합니다.

이것은 Lua의 콜백 내에서 호출될 때만 효과가 있습니다. 실행이 Lua로 돌아가면 타이머가 자동으로 일시 중지 해제됩니다. Lua에 대한 새로운 호출이 이루어지면 해당 호출 기간 동안 타이머가 일시 중지됩니다.

타이머가 일시 중지되지 않은 상태에서 PHP 콜백이 Lua를 다시 호출한 다음 해당 Lua 함수가 PHP를 다시 호출하는 경우 두 번째 PHP 호출은 타이머를 일시 중지할 수 없습니다. 논리는 두 번째 PHP 호출이 CPU 사용량을 제한에 대해 계산하는 것을 피하더라도 첫 번째 호출은 여전히 ​​계산한다는 것입니다.


매개변수

이 함수에는 매개변수가 없습니다.


반환 값

타이머가 현재 일시 중지되었는지 여부를 나타내는 bool을 반환합니다.


Examples

예제 #1 사용 타이머 조작

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

기타