In PHP wird die Funktion Time_nanosleep verwendet, um das Programm die angegebene Anzahl von Sekunden und Nanosekunden mit höherer Genauigkeit als Schlaf und US -Sleep zu machen, die für Szenarien mit strengen Zeitkontrollanforderungen geeignet sind. In der tatsächlichen Entwicklung müssen wir jedoch häufig beurteilen, ob diese Funktion erfolgreich ausgeführt wird und wie wir sie ordnungsgemäß umgehen sollen, wenn sie fehlschlägt.
In diesem Artikel wird die Methode zur Beurteilung des Ausführungsergebnisses der Time_nanosleep -Funktion im Detail erläutert und angemessene Beispiele für die Handhabung von Versagen liefern.
bool|array time_nanosleep(int $seconds, int $nanoseconds)
$ Sekunden : Die Anzahl der Sekunden hielt eine Ganzzahl.
$ nanosekunden : Die Anzahl der Nanosekunden machte eine Pause, Ganzzahl, Reichweite 0 ~ 999.999.999.
Rückgabewert:
Gibt auf Erfolg zurück.
Wenn das Signal unterbrochen wird, geben Sie ein Array mit den verbleibenden Sekunden und Nanosekunden zurück.
Es gibt zwei Möglichkeiten für den Rückgabewert von time_nanoSeep :
Return True : bedeutet, dass die gesamte Schlafzeit abgeschlossen ist und die Funktion normal endet.
Rückgabearray : bedeutet, dass der Schlaf durch das Signal unterbrochen wird. Das Array enthält die "Sekunden" und "Nanosekunden" -Tasten, was auf die verbleibende Zeit des Nichtschlafens hinweist.
Daher lautet die Urteilsmethode wie folgt:
$result = time_nanosleep(2, 500000000); // Schlafen2.5Zweite
if ($result === true) {
echo "Schlafen成功完成\n";
} elseif (is_array($result)) {
echo "SchlafenDurch Signal unterbrochen,剩余Zweite数:" . $result['seconds'] . ",剩余纳Zweite数:" . $result['nanoseconds'] . "\n";
} else {
echo "Unbekannter Fehler\n";
}
Wenn der Schlaf unterbrochen wird, entscheiden sich Entwickler normalerweise dafür, Time_nanosleeep erneut anzurufen, damit das Programm für die verbleibende Zeit weiter schläft, wodurch die Genauigkeit der gesamten Schlafdauer gewährleistet wird.
Beispielcode:
function safe_nanosleep(int $seconds, int $nanoseconds): void {
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
// Schlafen完成,Verlassen Sie die Schleife
break;
} elseif (is_array($result)) {
// Durch Signal unterbrochen,继续Schlafen剩余时间
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
} else {
// Andere abnormale Situationen,Ausnahmen oder Protokollierung können geworfen werden
throw new RuntimeException('time_nanosleepAusführung fehlgeschlagen');
}
}
}
try {
safe_nanosleep(1, 0);
echo "安全Schlafen完成\n";
} catch (RuntimeException $e) {
echo "Fehler:" . $e->getMessage() . "\n";
}
time_nanosleeep wird erfolgreich ausgeführt und true zurück, scheitert (durch das Signal unterbrochen), um das verbleibende Zeitarray zurückzugeben.
Durch die Beurteilung des Rückgabewerttyps können Sie klarstellen, ob die Funktion erfolgreich ist.
Bei der Begegnung bei Unterbrechungen ist die Verwendung der verbleibenden Schlafenschlafe eine häufige Möglichkeit, damit umzugehen.
Fangen Sie angemessene Ausnahmen oder Fehler an, um einen stabilen Betrieb des Programms sicherzustellen.
Referenzdokumentation ist zugänglich:
https://gitbox.net/manual/en/function.time-nanosleep.php