PHP에서 Time_nanosleep () 함수는 나노 초 정밀도로 지정된 시간 동안 프로그램을 수면하는 데 사용됩니다. 예를 들어 사용하기가 매우 간단합니다.
time_nanosleep(1, 500000000); // 잠1.5두번째
그러나 실제로 사용하면 Time_NanoSleep ()는 시스템 신호 (예 : 인터럽트 신호)에 의해 중단되어 수면이 일찍 끝날 수 있습니다. 이 경우, 함수는 부울 이 아닌 나머지 초와 나노초를 포함하는 배열을 반환합니다.
Linux 또는 Unix 시스템에서 프로세스는 다양한 신호 (예 : Sigint, Sigtern 등)를 수신하여 수면 상태를 방해하여 Time_nanoSleep ()가 반환됩니다. PHP 자체는 자동으로 수면을 재 시도하지 않으므로 수면 시간이 부정확합니다.
Time_NanoSleep ()가 신호에 의해 중단되면 true를 반환하지 않지만 배열을 반환합니다.
[
'seconds' => 剩余두번째数,
'nanoseconds' => 剩余纳두번째数,
]
이를 바탕으로 완전한 수면 시간을 보장하기 위해 루프를 작성할 수 있습니다.
function reliable_nanosleep(int $seconds, int $nanoseconds): void {
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
// 수면이 성공적으로 완료되었습니다
break;
}
// 신호에 의해 중단되었습니다,$result 남은 시간이 포함됩니다
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
}
}
이 기능은 전체 수면이 완료 될 때까지 나머지 수면 시간을 계속 재 시도합니다.
<?php
function reliable_nanosleep(int $seconds, int $nanoseconds): void {
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
break;
}
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
}
}
// 예:잠2.3두번째
echo "开始잠\n";
reliable_nanosleep(2, 300000000);
echo "잠结束\n";
?>
신호 처리 : 프로그램이 신호를 처리 해야하는 경우 PCNTL_Signal () 과 함께 신호 처리 기능을 설정하여 인터럽트 동작을보다 합리적으로 관리하는 것이 좋습니다.
대안 : 시스템 환경이 usleep () 또는 sleep ()를 지원하는 경우 사용할 수 있지만 정밀도가 낮습니다.
더 많은 PHP 관련 정보는 자세한 문서 및 예에 대해서는 gitbox.net/php-docs 를 참조하십시오.