Aktueller Standort: Startseite> Neueste Artikel> Erstellen Sie die PHP -Timerfunktion mit TIME_NANOSSEEP

Erstellen Sie die PHP -Timerfunktion mit TIME_NANOSSEEP

gitbox 2025-05-28

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.

Was ist Time_nanosleeep ?

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.

Szenarien verwenden

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

Implementierung eines einfachen Timer -Beispiels

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);

Code analysieren

  • 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.

Dinge zu beachten

  • 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.

In Kombination mit Remote -Ressourcenbeispielen

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.