PHP에서 타이머 기능을 구현하는 방법에는 여러 가지가 있습니다. Time_NanoSleep 기능은 스크립트가 지정된 초 및 나노초의 실행을 일시 중지 할 수 있도록 매우 정확한 수면 기능이므로 고정밀 타이머를 구현하는 데 사용할 수 있습니다. 이 기사는 Time_NanoSleep 기능을 사용하여 간단한 타이머를 만드는 방법을 자세히 설명합니다.
time_nanoSleep 함수는 현재 실행 된 스크립트로 지정된 시간을 일시 중지하는 데 사용됩니다. 시간 단위에는 초와 나노초가 포함됩니다. 구문은 다음과 같습니다.
bool time_nanosleep(int $seconds, int $nanoseconds)
$ SECONSS : 잠시 멈추고 무분별한 정수의 수.
$ Nanoseconds : 0에서 999,999,999까지의 나노 초 중단 멈췄습니다.
함수는 정상 수면이 완료 되었음을 나타내고 실패하면 거짓을 반환하거나 오류가 트리거됩니다.
time_nanoSleep 은 다음과 같은 대기 시간의 정확한 제어가 필요한 시나리오에 매우 적합합니다.
고정밀 타이머를 구현하십시오
실행 주파수를 제어하십시오
CPU 유휴를 피하고 자원 폐기물을 줄입니다
다음 예에서는 총 시간에 도달 할 때까지 지정된 밀리 초마다 타임 스탬프를 출력하는 타이머를 구현합니다.
<?php
/**
* 간단한 타이머 기능,지정된 간격으로 작업을 실행합니다
*
* @param int $interval_ms 간격 시간,밀리 초
* @param int $total_duration_ms 총 시간,밀리 초
*/
function simple_timer(int $interval_ms, int $total_duration_ms)
{
$start_time = microtime(true);
$elapsed = 0;
while ($elapsed < $total_duration_ms / 1000) {
// 수면 초와 나노초를 계산하십시오
$seconds = intdiv($interval_ms, 1000);
$nanoseconds = ($interval_ms % 1000) * 1000000;
// 수면 지정 시간
time_nanosleep($seconds, $nanoseconds);
// 현재 타임 스탬프 및 실행 시간을 출력합니다
$current_time = microtime(true);
$elapsed = $current_time - $start_time;
echo "Elapsed: " . round($elapsed, 3) . " seconds\n";
}
echo "시간 끝!\n";
}
// 그 밖의 모든 500 밀리 초로 한 번 실행하십시오,계속되는 5 두번째
simple_timer(500, 5000);
미세 시간 (true)을 사용하여 고정밀 현재 시간을 얻으십시오.
루프에서 time_nanoSleep을 호출하여 지정된 시간 동안 스크립트를 일시 중지하십시오.
실행 시간을 계산하고 인쇄하십시오.
세트의 총 지속 시간에 도달 할 때까지 순환하십시오.
Time_nanoSleep은 신호에 의해 중단 될 수 있습니다. 중단되면 함수가 False를 반환하고 경고를 트리거합니다. 안정성을 보장하기 위해 PCNTL 기능을 사용하여 신호를 캡처 할 수 있습니다.
나노 초의 정확도는 운영 체제에 따라 다르며 모든 시스템이 매우 미세한 나노초 수준의 수면을 지원하는 것은 아닙니다.
일부 환경에서는 ustep and time_nanosleep 의 정확성과 효과가 크게 다르지 않을 수 있습니다.
PHP를 통해 원격 인터페이스에 액세스하고 타이머를 결합하여 정기 요청을 작성 해야하는 경우 다음 코드 예제를 사용할 수 있습니다.
<?php
function fetch_data_periodically($url, $interval_ms, $times)
{
for ($i = 0; $i < $times; $i++) {
// 요청을 보내십시오
$response = file_get_contents($url);
echo "Response #$i: " . substr($response, 0, 50) . "...\n";
// 잠
$seconds = intdiv($interval_ms, 1000);
$nanoseconds = ($interval_ms % 1000) * 1000000;
time_nanosleep($seconds, $nanoseconds);
}
}
$url = "https://gitbox.net/api/data";
fetch_data_periodically($url, 1000, 3);
이 코드는 1 초마다 gitbox.net 에서 인터페이스를 요청하고 연속으로 3 번 실행합니다.