Es gibt viele Möglichkeiten, die Timer -Funktion in PHP zu implementieren. Die Funktion Time_NanOSleep ist eine sehr genaue Schlaffunktion, mit der Skripte die Ausführung bestimmter Sekunden und Nanosekunden pausieren können, sodass sie zur Implementierung von Timern mit hoher Präzision verwendet werden können. In diesem Artikel wird detailliert erläutert, wie die Funktion Time_NanOSleep zum Erstellen eines einfachen Timers verwendet wird.
Mit der Funktion Time_Nanosleep wird die angegebene Zeit durch das aktuell ausgeführte Skript pausieren. Die Zeiteinheiten umfassen Sekunden und Nanosekunden. Die Syntax ist wie folgt:
bool time_nanosleep(int $seconds, int $nanoseconds)
$ Sekunden : Die Anzahl der Sekunden hielt eine nicht negative Ganzzahl.
$ nanosekunden : Die Anzahl der Nanosekunden machte eine Pause, von 0 bis 999.999.999.
Die Funktion kehrt treu zurück, um anzuzeigen, dass der normale Schlaf abgeschlossen ist, und fälschlicherweise falsch zurückgegeben, wenn sie fehlschlägt, oder ein Fehler ausgelöst wird.
TIME_NANOSSEED ist sehr geeignet für Szenarien, in denen eine präzise Kontrolle der Wartezeit erforderlich ist, z. B.:
Timer implementieren
Steuern Sie die Ausführungsfrequenz
Vermeiden Sie den CPU -Leerlauf und reduzieren Sie Ressourcenabfälle
Im folgenden Beispiel werden wir einen Timer implementieren, der eine Zeitstempel in jeder angegebenen Anzahl von Millisekunden ausgibt, bis die Gesamtzeit erreicht ist.
<?php
/**
* Einfache Timer -Funktion,Aufgaben in bestimmten Intervallen ausführen
*
* @param int $interval_ms Intervallzeit,Einheit Millisekunden
* @param int $total_duration_ms Gesamtzeit,Einheit Millisekunden
*/
function simple_timer(int $interval_ms, int $total_duration_ms)
{
$start_time = microtime(true);
$elapsed = 0;
while ($elapsed < $total_duration_ms / 1000) {
// Berechnen Sie Schlafsekunden und Nanosekunden
$seconds = intdiv($interval_ms, 1000);
$nanoseconds = ($interval_ms % 1000) * 1000000;
// Schlafspezifische Zeit
time_nanosleep($seconds, $nanoseconds);
// Ausgeben aktueller Zeitstempel und Laufzeit
$current_time = microtime(true);
$elapsed = $current_time - $start_time;
echo "Elapsed: " . round($elapsed, 3) . " seconds\n";
}
echo "Zeitende!\n";
}
// Jeder andere 500 Einmal in Millisekunden ausführen,Fortsetzung 5 Zweite
simple_timer(500, 5000);
Verwenden Sie Mikrotime (TRUE) , um die hochpräzisen Stromzeit zu erhalten.
Rufen Sie Time_nanosleeep in der Schleife an, um das Skript für die angegebene Zeit zu pausieren.
Berechnen Sie die Laufzeit und drucken Sie sie aus.
Zyklus bis zur Gesamtdauer des Satzes erreicht.
Time_nanosleeep kann durch das Signal unterbrochen werden. Wenn es unterbrochen wird, gibt die Funktion false zurück und löst eine Warnung aus. Das Signal kann mit der PCNTL -Funktion erfasst werden, um die Stabilität zu gewährleisten.
Die Genauigkeit von Nanosekunden hängt vom Betriebssystem ab, und nicht alle Systeme unterstützen einen schlafenden Schlaf auf Nanosekundenebene.
In einigen Umgebungen unterscheiden sich die Genauigkeit und Wirkung von Usleep und Time_nanosleep möglicherweise nicht wesentlich.
Wenn Sie über PHP auf die Remote -Schnittstelle zugreifen und den Timer so kombinieren müssen, dass Sie periodische Anforderungen stellen, können Sie das folgende Code -Beispiel verwenden:
<?php
function fetch_data_periodically($url, $interval_ms, $times)
{
for ($i = 0; $i < $times; $i++) {
// Senden Sie eine Anfrage
$response = file_get_contents($url);
echo "Response #$i: " . substr($response, 0, 50) . "...\n";
// Schlafen
$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);
Dieser Code fordert alle 1 Sekunde die Schnittstelle auf Gitbox.net an und führt dreimal in einer Zeile aus.