Sleep()-Funktion in C-Sprache

Sleep Funktion In C Sprache



Wenn wir Programme entwickeln, die eine Benutzerinteraktion erfordern, gibt es Fälle, in denen es notwendig ist, die Systemzeiten anzupassen, damit die Anwendung lesbar und einfach zu verwenden ist.

Wenn wir beispielsweise eine Konsolenanwendung entwickeln, bei der wir den Benutzer über die Aufgaben informieren müssen, die nacheinander ausgeführt werden, sollten die Informationsmeldungen eine angemessene Zeit lang bestehen bleiben, damit der Benutzer Zeit hat, sie zu lesen, bevor sie gelöscht werden Das Programm geht zum nächsten Befehl über.

In diesem Linuxhint-Artikel erfahren Sie, wie Sie mit der Funktion „sleep()“ Verzögerungen in Echtzeit erzeugen. Wir zeigen Ihnen die Syntax und Beschreibung dieser Funktion sowie die Möglichkeiten, die POSIX bietet, um Verzögerungen mit Bruchteilen von weniger als einer Sekunde zu erzeugen. Anschließend zeigen wir Ihnen anhand praktischer Beispiele, Codes und Bilder, wie Sie die Ausführung eines Programms verzögern können und welche Auswirkungen Signale auf diese Funktion haben.








Syntax der Sleep()-Funktion in C-Sprache



ohne Vorzeichen int schlafen ( ohne Vorzeichen int Sek )

Beschreibung der Sleep()-Funktion in C-Sprache

Die Funktion „sleep()“ versetzt den Prozess oder Thread für die Zeit in Sekunden in den Ruhezustand, die im Eingabeargument „sec“ angegeben ist, bei dem es sich um eine vorzeichenlose Ganzzahl handelt. Sobald die Funktion „sleep()“ aufgerufen wird, schläft der aufrufende Prozess, bis eine Zeitüberschreitung auftritt oder ein Signal empfangen wird.



Diese Funktion wird häufig verwendet, um lange Verzögerungen von mehr als 1 Sekunde bei der Ausführung von Echtzeitprozessen zu erzwingen. Für Verzögerungen von weniger als 1 Sekunde stellt POSIX die Mikrosekunden-Auflösungsfunktion usleep() zur Verfügung, die denselben Methodenaufruf wie sleep() verwendet. Für Verzögerungen von weniger als 1 Mikrosekunde gibt es auch die Funktion nanosleep() mit einer Auflösung von 1 Nanosekunde, allerdings mit einer anderen Aufrufmethode, bei der sie die „timespec“-Strukturen als Eingabeargumente verwendet, um die Verzögerungszeit festzulegen.





Wenn die Funktion „sleep()“ die gesamte angegebene Zeit verbraucht hat, gibt sie als Ergebnis 0 zurück. Wenn die Ausführung vor Ablauf der angegebenen Zeit durch das Eintreffen eines Signals unterbrochen wird, wird die verbleibende Anzahl an Sekunden bis zu diesem Zeitpunkt zurückgegeben.

Die Funktion „sleep()“ ist im Header „unistd.h“ definiert. Um es zu verwenden, müssen wir diese Datei wie folgt in den Code einbinden:



#include

So führen Sie mit der Funktion Sleep() Verzögerungen in einen Prozess ein

In diesem Beispiel erstellen wir einen Timer, der aus einer Endlosschleife besteht, in der wir die Meldung „Verstrichene Zeit“ in der Befehlskonsole ausgeben, gefolgt von den verstrichenen Sekunden des Prozesses. Jede dieser Schleifen wird aufgrund der durch die Funktion „sleep()“ verursachten Verzögerung alle 2 Sekunden wiederholt.

Dazu nehmen wir eine leere Datei mit der Erweiterung „.c“ und fügen darin die Header „stdio.h“ und „unistd.h“ ein. Dann öffnen wir eine leere main()-Funktion und definieren darin die Variable seconds vom Typ int, die wir als Zähler für die verstrichene Zeit verwenden.

Sobald die Header eingefügt und die Variable deklariert ist, öffnen wir eine Endlosschleife und verwenden darin die Funktion printf(), um die Nachricht und den Zeitwert anzuzeigen. In der nächsten Zeile erhöhen wir die Zeitvariable um 2 und rufen dann die Funktion „sleep()“ mit dem Wert 2 als Eingabeargument auf. Auf diese Weise wiederholt sich dieser Zyklus jede Sekunde und wir erhalten einen Zähler, der die verstrichene Zeit auf dem Bildschirm anzeigt. Schauen wir uns nun den Code für diese Anwendung an. Sehen wir uns den vollständigen Code für dieses Beispiel an:

#include
#include

Leere hauptsächlich ( )
{
int Sekunden = 0 ;
während ( 1 )
{
printf ( „Verstrichene Zeit: %i \N ' , Sekunden ) ;
Sekunden += 2 ;
schlafen ( 2 ) ;
}

}

Im Folgenden sehen wir ein Bild mit der Kompilierung und Ausführung dieses Codes. Wie wir sehen können, druckt das Programm alle 2 Sekunden die seit der Ausführung des Prozesses verstrichenen Sekunden auf dem Bildschirm aus.

Auswirkung von Signalen auf die Sleep()-Funktion

In diesem Beispiel wollen wir die Wirkung von Signalen auf einen Prozess beobachten, der mit der Funktion „sleep()“ in den Ruhezustand versetzt wird. Dazu erstellen wir eine einfache Anwendung, die aus einer main()-Funktion und einem Handler für Signal 36 besteht.

In der ersten Zeile der Funktion main() deklarieren wir die verbleibende Variable vom Typ int, in der wir den Wert speichern, der von der Funktion sleep() zurückgegeben wird. Dann verwenden wir die Funktion signal(), um den Handler an Signal 36 zu binden. In der nächsten Zeile zeigen wir die PID des Prozesses an, die wir dann verwenden, um ein Signal von einer zweiten Shell an den Prozess zu senden. Schließlich rufen wir die Funktion „sleep()“ auf und setzen ihr Eingabeargument auf 60 Sekunden, lange genug, um ein Signal von einer zweiten Shell zu senden. Die verbleibende Variable senden wir als Ausgabeargument an sleep().

Der Handler, der an Signal 36 angehängt ist, besteht aus einer Codezeile, in der die Funktion printf() die Meldung „Verbleibende Zeit:“ druckt, gefolgt von dem Wert, der von sleep() zum Zeitpunkt des Eintreffens des Signals beim Prozess zurückgegeben wird. Schauen wir uns hier den Code für dieses Beispiel an.

#include
#include
#include
#include

Leere Handler ( int übrig ) ;

Leere hauptsächlich ( )
{
int übrig ;
Signal ( 36 , Handler ) ;
printf ( „Prozess-ID: %i \N ' , getpid ( ) ) ;
übrig = schlafen ( 60 ) ;
}

Leere Handler ( int übrig )

{
printf ( „Verbleibende Zeit: %i \N ' , übrig ) ;
}

Das folgende Bild, das wir sehen, zeigt die Kompilierung und Ausführung dieses Codes:

Um die Wirkung der Signale in diesem Prozess zu sehen, kompilieren wir diesen Code und führen ihn aus. Dann senden wir von einem zweiten Terminal ein Signal mit der folgenden Syntax:

töten - n Signal PID

Das folgende Bild, das wir sehen, zeigt die Ausführung des Codes in der vorherigen Konsole und die Auswirkungen des Eintreffens eines Signals, das von der folgenden Konsole gesendet wird. Wie Sie sehen können, hat das Signal die Wirkung der Funktion „sleep()“ unterdrückt, indem es den Prozess aktiviert hat:

Abschluss

In diesem Linuxhint-Artikel haben wir Ihnen gezeigt, wie Sie mit der Funktion „sleep()“ einen Prozess für eine bestimmte Anzahl von Sekunden in den Ruhezustand versetzen. Außerdem haben wir Ihnen die Syntax sowie die Beschreibung der Funktion und der aufrufenden Methode gezeigt.

Anhand praktischer Beispiele, Code-Schnipsel und Bildern haben wir Ihnen gezeigt, wie Sie mit der Funktion „sleep()“ einen Prozess in den Ruhezustand versetzen und welche Auswirkungen das Eintreffen eines Signals auf einen schlafenden Prozess hat.