PHPでは、 Time_nanos Sleep関数を使用して、プログラムが指定された秒数とNan秒を一時停止させます。ただし、実際の開発では、この関数が正常に実行されるかどうか、および失敗したときに適切に処理する方法を判断する必要があることがよくあります。
この記事では、 time_nanosleep機能の実行結果を判断する方法を詳細に説明し、合理的な障害処理の例を提供します。
bool|array time_nanosleep(int $seconds, int $nanoseconds)
$秒:一時停止した秒数、整数。
$ nanoseconds :一時停止したナノ秒の数、整数、範囲は0〜999,999,999です。
返品値:
成功に当てはまります。
信号によって中断された場合、残りの秒とナノ秒を含む配列を返します。
Time_nanos Sleepの返品値には2つの可能性があります。
trueを返す:すべての睡眠時間が完了し、関数が正常に終了することを意味します。
返品配列:睡眠が信号によって中断されることを意味します。アレイには「秒」と「ナノ秒」キーが含まれており、睡眠がない残りの時間を示します。
したがって、判断方法は次のとおりです。
$result = time_nanosleep(2, 500000000); // 寝る2.52番
if ($result === true) {
echo "寝る成功完成\n";
} elseif (is_array($result)) {
echo "寝る信号によって中断されます,剩余2番数:" . $result['seconds'] . ",剩余纳2番数:" . $result['nanoseconds'] . "\n";
} else {
echo "不明なエラー\n";
}
睡眠が中断されると、開発者は通常、 Time_nanos Sleepを再度呼び出して、プログラムが残りの時間の間睡眠を続けることを可能にし、それにより全体的な睡眠時間の精度を確保します。
サンプルコード:
function safe_nanosleep(int $seconds, int $nanoseconds): void {
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
// 寝る完成,ループを終了します
break;
} elseif (is_array($result)) {
// 信号によって中断されます,继续寝る剩余时间
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
} else {
// 他の異常な状況,例外またはロギングをスローできます
throw new RuntimeException('time_nanosleep実行に失敗しました');
}
}
}
try {
safe_nanosleep(1, 0);
echo "安全寝る完成\n";
} catch (RuntimeException $e) {
echo "間違い:" . $e->getMessage() . "\n";
}
time_nanos Sleepは正常に実行され、真の返品、失敗(信号によって中断されて)残りの時間配列を返します。
返品値のタイプを判断することにより、関数が成功したかどうかを明確にすることができます。
中断に遭遇する場合、ループの再帰睡眠の残り時間を使用することは、それに対処するための一般的な方法です。
プログラムの安定した操作を確保するために、例外またはエラーを適切にキャッチします。
参照ドキュメントにアクセスできます:
https://gitbox.net/manual/en/function.time-nanosleep.php