Sleep() Funktion i C Language

Sleep Funktion I C Language



Når vi udvikler programmer, der kræver brugerinteraktion, er der tilfælde, hvor det er nødvendigt at justere systemtiderne, så applikationen er læsbar og nem at bruge.

For eksempel, hvis vi udvikler en konsolapplikation, hvor vi skal informere brugeren om de opgaver, der vil blive udført i rækkefølge, bør informationsmeddelelserne vare ved i rimelig tid, så brugeren har tid til at læse dem, før de slettes og programmet går videre til næste kommando.

I denne Linuxhint-artikel lærer du, hvordan du bruger sleep()-funktionen til at skabe forsinkelser i realtid. Vi viser dig syntaksen og beskrivelsen af ​​denne funktion, samt de muligheder, som POSIX giver for at skabe forsinkelser med brøkdele på mindre end et sekund. Derefter viser vi dig, ved hjælp af praktiske eksempler, koder og billeder, hvordan du forsinker udførelsen af ​​et program og virkningerne af signaler på denne funktion.








Syntaks for Sleep()-funktionen i C Language



usigneret int søvn ( usigneret int sek )

Beskrivelse af Sleep()-funktionen i C Language

Sleep()-funktionen sætter processen eller tråden i dvale i den tid i sekunder, der er angivet i inputargumentet 'sek', som er et heltal uden fortegn. Når sleep()-funktionen kaldes, går opkaldsprocessen i dvale, indtil den timeout eller modtager et signal.



Denne funktion bruges ofte til at gennemtvinge lange forsinkelser på mere end 1 sekund i udførelsen af ​​realtidsprocesser. For forsinkelser på mindre end 1 sekund giver POSIX mikrosekundsopløsningsfunktionen usleep(), som bruger samme metodekald som sleep(). For forsinkelser på mindre end 1 mikrosekund er der også nanosleep()-funktionen med en opløsning på 1 nanosekund, men med en anden opkaldsmetode, hvor den bruger 'timespec'-strukturerne som input-argumenter til at indstille forsinkelsestiden.





Hvis sleep()-funktionen har brugt hele den angivne tid, returnerer den 0 som resultat. Hvis udførelsen afbrydes ved ankomsten af ​​et signal, før den angivne tid er gået, returnerer den det resterende antal sekunder indtil dette tidspunkt.

Sleep()-funktionen er defineret i 'unistd.h'-headeren. For at bruge den skal vi inkludere denne fil i koden som følger:



#include

Sådan introduceres forsinkelser i en proces med Sleep()-funktionen

I dette eksempel opretter vi en timer, der består af en uendelig løkke, hvor vi udskriver meddelelsen 'Forløbet tid' i kommandokonsollen, efterfulgt af de forløbne sekunder af processen. Hver af disse loops gentages hvert 2. sekund på grund af forsinkelsen, der er forårsaget af sleep()-funktionen.

For at gøre dette tager vi en tom fil med filtypen '.c' og tilføjer 'stdio.h' og 'unistd.h' overskrifterne i den. Derefter åbner vi en tom main() funktion og definerer den variable sekunder af typen int, som vi vil bruge som en tæller for den forløbne tid.

Når overskrifterne er indsat, og variablen er erklæret, åbner vi en uendelig løkke og bruger printf()-funktionen i den til at vise meddelelsen og tidsværdien. På næste linje øger vi tidsvariablen med 2 og kalder derefter sleep()-funktionen med værdien 2 som input-argument. På denne måde gentages denne cyklus hvert sekund, og vi får en tæller, der viser den forløbne tid på skærmen. Lad os nu tage et kig på koden til denne applikation. Lad os se den komplette kode for dette eksempel:

#include
#include

ugyldig vigtigste ( )
{
int sekunder = 0 ;
mens ( 1 )
{
printf ( 'Forløbet tid: %i \n ' , sekunder ) ;
sekunder += 2 ;
søvn ( 2 ) ;
}

}

I det følgende vil vi se et billede med kompilering og eksekvering af denne kode. Som vi kan se, udskriver programmet hvert 2. sekund de forløbne sekunder på skærmen siden udførelsen af ​​processen.

Effekt af signaler på Sleep()-funktionen

I dette eksempel ønsker vi at observere effekten af ​​signaler på en proces, der sættes i dvale ved hjælp af sleep()-funktionen. For at gøre dette opretter vi en simpel applikation, der består af en main() funktion og en handler for signal 36.

I den første linje i main()-funktionen erklærer vi den resterende variabel af typen int, hvor vi gemmer værdien, der returneres af sleep()-funktionen. Derefter bruger vi signal()-funktionen til at binde handleren til signal 36. På næste linje viser vi processens PID, som vi derefter bruger til at sende et signal fra en anden skal til processen. Til sidst kalder vi sleep()-funktionen og sætter dens input-argument til 60 sekunder, lang nok til at sende et signal fra en anden shell. Vi sender den resterende variabel som output-argument til sleep().

Håndteren, der er knyttet til signal 36, består af en kodelinje, hvor printf()-funktionen udskriver meddelelsen 'Resterende tid:' efterfulgt af værdien, der returneres af sleep() på det tidspunkt, signalet ankommer til processen. Lad os her se på koden til dette eksempel.

#include
#include
#include
#include

ugyldig handler ( int tilbage ) ;

ugyldig vigtigste ( )
{
int tilbage ;
signal ( 36 , handler ) ;
printf ( 'Proces-id: %i \n ' , blid ( ) ) ;
tilbage = søvn ( 60 ) ;
}

ugyldig handler ( int tilbage )

{
printf ( 'Resterende tid: %i \n ' , tilbage ) ;
}

Følgende billede, som vi ser, viser kompileringen og udførelsen af ​​denne kode:

For at se effekten af ​​signalerne i denne proces kompilerer vi denne kode og kører den. Derefter sender vi fra en anden terminal et signal med følgende syntaks:

dræbe - n signal PID

Det følgende billede, som vi ser, viser udførelsen af ​​koden i den forrige konsol og virkningerne af ankomsten af ​​et signal, der sendes fra den følgende konsol. Som du kan se, har signalet undertrykt effekten af ​​sleep()-funktionen ved at vække processen:

Konklusion

I denne Linuxhint-artikel viste vi dig, hvordan du bruger sleep()-funktionen til at sætte en proces i dvale i et bestemt antal sekunder. Vi viste dig også syntaksen samt beskrivelsen af ​​funktionen og kaldemetoden.

Ved hjælp af praktiske eksempler, kodestykker og billeder viste vi dig, hvordan du sætter en proces i dvale, og hvad der påvirker ankomsten af ​​et signal på en soveproces ved hjælp af sleep()-funktionen.