C Nanosleep -Funktionsverbrauch

C Nanosleep -Funktionsverbrauch
Die Funktion nanosleep ist eine Methode des UNIX -Systems. Der Zweck von Nanosleep ist es, die Ausführung eines bestimmten Programms für einen definierten Zeitraum auszusetzen oder zu pausieren. Dieser Artikel hilft Ihnen, Ihnen zu verstehen und Ihnen ein verbessertes Verständnis für die Verwendung von NanoSleep () -Funktion zu vermitteln."Eine weitere Funktion ist" Schlaf ", aber wir werden Nanosleep () nutzen (), weil wir Nanosekunden für Pause/Schlafzeit bereitstellen können.

Syntax:

Die obige Abbildung gibt die Syntax der Nanosägenfunktion an und ist in der Header -Datei definiert.

RQTP: RQTP ist ein Zeiger auf Timesspec, der das Zeitintervall angibt, für das der Benutzer den Thread/Programm aussetzen oder pausieren möchte.

RMTP: RMTP ist ein Zeiger auf Timesspec, der angibt, dass die Funktion den Zeitraum im Intervall gespeichert hat.

Die Struktur Timesspec wird verwendet, um Zeitintervalle auf Nanosekundenebene zu identifizieren.

Zweck der Verwendung von Nanosleep () in c

Nanosleep ist eine tragbare Schnittstelle für Betriebssysteme. Es handelt sich um einen systemkonformen Aufruf, einen bestimmten Thread der Ausführung eines Programms für eine bestimmte Zeitspanne auszusetzen. Ähnliche Funktionen sind auch für denselben Zweck verfügbar. Der Schlaf ist einer dieser Prozesse, die Sekunden dauert, um das Programm auszusetzen, aber es soll eine niedrige Auflösung liefern. Daher gewährt die Nanosleep -Funktion dem Benutzer die Erlaubnis, die Schlafzeit in Nanosekunden für eine bessere Präzision zu ermöglichen.

Zuvor wurde die NanoSleep () -Methode verwendet, um Pausen von bis zu 2 ms zu verarbeiten, wenn sie aus den geplanten Threads aufgerufen werden. Es wäre jedoch mehr Präzision erforderlich, um zeitkritische Hardware oder Anwendungen zu verarbeiten.

Rückgabewert

  1. Wenn das Programm erfolgreich ausgeführt wurde, wird es 0 zurückgeben.
  2. Wenn das Programm erfolglos ausgeführt wurde oder fehlgeschlagen und unterbrochen wurde, wird -1 zurückgegeben.

Fehler

  1. Efault: Efault -Fehlertyp tritt auf.
  2. Eintr: Einrtr -Typ tritt auf, wenn die Pause durch ein Signal unterbrochen wird.
  3. Einval: Wenn der Wert von Nanosekunden in der Struct Timesspec nicht im Bereich von 0 bis 999999999 liegt oder einen negativen Wert hat, wird dieser Fehler geworfen.

Wenn die in RQTP ermittelte Span etwas anderes als ein präziser Unterschied der versteckten Körnigkeitsuhr ist, wird sie gesammelt. Außerdem könnte es später eine Verschiebung geben, wenn der Rest der Arbeit abgeschlossen ist, bevor die CPU die aufrufende Zeichenfolge noch einmal ausführen darf.

Da die Methode Nanosleep nicht für eine relative Zeitspanne funktioniert, ist sie tendenziell riskant, wenn die Methode wiederholt aufgerufen wird, nachdem sie durch Signale behindert oder unterbrochen werden können, da die Zeit zwischen Signalunterbrechungen und Neustartanlagen bei der Schlafe eine geringfügige Verschiebung verursacht Oberflächen. Verwenden Sie Clock Nanosleeep (2) mit einem direkten Zeitwert, um sich von diesem Problem fernzuhalten.

Nanosleep () sollte die Zeit mit der Echtzeituhr des Gegners gemäß POSIX quantifizieren.1. Linux nutzt erneut die monotonische Uhr, um die Zeit zu überwachen. Dies ist vermutlich unerheblich, weil der Possixe.1 Takt -Set -Zeit (2) drückt insbesondere aus, dass krampfische Veränderungen in der Uhr Echtzeit Nanosleep nicht beeinflussen sollten ().

Wenn wir den Wert der Echtzeituhr über SetTime (2) festlegen. Dies hat keine Auswirkungen auf die Programme, die blockiert sind und in der Wartezeit für eine relative Zeit auf der Grundlage dieser Uhr warten.

Beispiel in c

Zunächst mussten wir die Bibliothek initialisieren, die die Struktur eines Timesspec -Anforderungszeitzeigers und eines Timesspec -Zeitzeigers hat. Es gibt zwei Zeiger, die die Zeit speichern, die der Benutzer das Programm einstellen möchte.

Danach starten wir unseren Hauptkörper und müssen zwei TimePec -Objekte erstellen, die unsere Anfrage und die verbleibende Zeit enthalten. Wir könnten diesen beiden Objekten einen Wert zuweisen, aber in unserem Fall haben wir 3 Sekunden und 500 Nanosekunden gewählt.

Jetzt übergeben wir die Adressen der erstellten Objekte an Nanosleep, wie Sie in Zeile Nummer 10 beobachten können. Wir werden auch überprüfen.

Das obige Programm druckt die folgende Ausgabe, wenn es erfolgreich ausgeführt wird:

Wenn wir den Antwortwert auf 1 ändern, fällt fehl und erzeugt den folgenden Fehler als Ausgabe.

Wenn wir nun den folgenden Code auf unserem GCC -Terminal ausführen möchten. Wir werden zuerst unsere Datei als Haupt speichern.c und verwenden Sie dann den folgenden Befehl in Ihrem Terminal, um das Programm auszuführen: „GCC-Wall Main.C-O ”. Eine Wand bedeutet, alle Warnmeldungen zu aktivieren, während wir unser Programm ausführen.

Käfer

Die aktuelle Ausführung von Nanosleep () hängt von der typischen Bitaktkomponente ab, die ein Ziel von 1/Hz s hat. In diesem Sinne stoppt Nanosleep () konsequent für die vordefinierte Zeit, kann jedoch bis zu 10 ms länger dauern als angegeben, bis die Wechselwirkung noch einmal ausgeführt wird. Für eine ähnliche Erklärung wird der Wert im Falle eines übermittelten Signals in *rmtp zurückgegeben und wird normalerweise auf die folgende größere Differenz von 1/Hz s eingestellt.

Begründung:

Es ist normal, die Ausführung einer Zeichenfolge für einige Zeit auszusetzen, um die Situation mit dem Auge auf nicht abgestreckte Arbeiten zu untersuchen. Unzählige wirkliche Notwendigkeiten können mit einer einfachen Erweiterung des Schlafes () ein besseres Ziel vermittelt werden.

Im posix.1-1990 Norm und SVR4 ist es möglich, eine solche alltägliche Praxis auszuführen, außer dass das Wiederauftreten des Aufwachens durch das Ziel des Alarms () und Sleep () Funktionen eingeschränkt ist. Es wird wahrscheinlich einen solchen Standard in 4 schreiben.3 BSD, während Sie keine statischen Lagerbestände verwenden und keine Framework -Büros ersparen,. Obwohl es möglich ist, eine Funktion mit vergleichbarem Nutzen für den Schlaf () unter Verwendung des Restes der Timer_* () -Kapazitäten zu komponieren, erfordert eine solche Kapazität die Verwendung von Anzeichen und die Buchung einer signifikanten Anzahl. Dieses Volumen von IEEE STD 1003.1-2001 braucht, um Nanosleeep () nicht zu medizinisch zu sein, wenn die Zeichen funktionieren.

Die Arbeit von Nanosleep () gibt einen Wert von 0 für den Fortschritt und - 1 beim Versagen zurück. Dieser letzte Optionsfall ist nicht ganz der gleiche wie der Schlaf (). Dies geschah angesicht.

Abschluss

Der Schwerpunkt dieser Forschung lag dazu, Ihnen dabei zu helfen, ein besseres Verständnis der Methode zu entwickeln,. Um einen guten Halt an Methoden wie Nanosleeep zu haben, muss sie mit dem einfachsten Beispiel veranschaulichen, um sie zu veranschaulichen. Wir haben unser Bestes versucht, die besten Informationen wie Fehler, Begründung, Beispiele, Fehler und Zusammenfassung zu liefern. Damit Sie die Interpretierbarkeit und Wiederverwendbarkeit Ihres Codes weiter verbessern können. Wir haben eine einfache Erklärung der Syntax durchgesehen. Der Artikel hilft Ihnen dabei, schnell eine gründliche Interpretation der Verwendung von Nanosleeep () als Methode zu erhalten. Um die Methode viel besser zu nutzen, wurden Überlegungen als Variablen für die Benutzer angesprochen und gut erklärt.