En PHP, la fonction Time_nanosleep est utilisée pour faire en sorte que le programme en pause le nombre spécifié de secondes et de nanosecondes, avec une précision plus élevée que le sommeil et le sommeil , adapté à des scénarios avec des exigences strictes de contrôle du temps. Cependant, dans le développement réel, nous devons souvent juger si cette fonction est exécutée avec succès et comment la gérer correctement en cas d'échec.
Cet article expliquera en détail la méthode de jugement du résultat d'exécution de la fonction Time_nanosleep et fournit des exemples de traitement des défaillances raisonnables.
bool|array time_nanosleep(int $seconds, int $nanoseconds)
$ secondes : le nombre de secondes interrompues, entier.
$ nanosecondes : le nombre de nanosecondes interrompues, entier, la plage est de 0 ~ 999 999 999.
Valeur de retour:
Revient vrai sur le succès.
Si vous êtes interrompu par le signal, renvoyez un tableau contenant les secondes et les nanosecondes restantes.
Il y a deux possibilités pour la valeur de retour de Time_nanosleep :
Retour vrai : signifie que tout le temps de sommeil est terminé et que la fonction se termine normalement.
Tableau de retour : signifie que le sommeil est interrompu par le signal. Le tableau contient les clés «secondes» et «nanosecondes» , indiquant le temps restant de ne pas dormir.
Par conséquent, la méthode du jugement est la suivante:
$result = time_nanosleep(2, 500000000); // Dormir2.5Deuxième
if ($result === true) {
echo "Dormir成功完成\n";
} elseif (is_array($result)) {
echo "DormirInterrompu par signal,剩余Deuxième数:" . $result['seconds'] . ",剩余纳Deuxième数:" . $result['nanoseconds'] . "\n";
} else {
echo "Erreur inconnue\n";
}
Lorsque le sommeil est interrompu, les développeurs choisissent généralement d'appeler Time_nanosleep à nouveau pour permettre au programme de continuer à dormir pendant le temps restant, assurant ainsi la précision de la durée globale du sommeil.
Exemple de code:
function safe_nanosleep(int $seconds, int $nanoseconds): void {
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
// Dormir完成,Quitter la boucle
break;
} elseif (is_array($result)) {
// Interrompu par signal,继续Dormir剩余时间
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
} else {
// Autres situations anormales,Des exceptions ou une journalisation peuvent être lancées
throw new RuntimeException('time_nanosleepL'exécution a échoué');
}
}
}
try {
safe_nanosleep(1, 0);
echo "安全Dormir完成\n";
} catch (RuntimeException $e) {
echo "erreur:" . $e->getMessage() . "\n";
}
Time_nanosleep s'exécute avec succès et renvoie true , échoue (interrompu par le signal) pour renvoyer le tableau de temps restant.
En jugeant le type de valeur de retour, vous pouvez clarifier si la fonction est réussie.
Lorsque vous rencontrez des interruptions, l'utilisation de la boucle de sommeil récursif est un moyen courant de le faire face.
Associez de manière appropriée des exceptions ou des erreurs pour garantir un fonctionnement stable du programme.
La documentation de référence est accessible:
https://gitbox.net/manual/en/fonction.time-nanosleep.php