Sleep() funktsioon C-keeles

Sleep Funktsioon C Keeles



Kui arendame programme, mis nõuavad kasutaja sekkumist, on juhtumeid, kus on vaja süsteemi aegu kohandada, et rakendus oleks loetav ja hõlpsasti kasutatav.

Näiteks kui töötame välja konsoolirakendust, kus peame teavitama kasutajat järjestikku täidetavatest ülesannetest, peaksid teabeteated säilima mõistliku aja jooksul, et kasutajal oleks aega neid enne nende kustutamist lugeda ja programm liigub järgmise käsu juurde.

Sellest Linuxhinti artiklist saate teada, kuidas kasutada funktsiooni Sleep() reaalajas viivituste tekitamiseks. Näitame teile selle funktsiooni süntaksit ja kirjeldust ning võimalusi, mida POSIX pakub, et luua viivitusi vähem kui sekundi murdosadega. Seejärel näitame teile praktiliste näidete, koodide ja piltide abil, kuidas programmi täitmist edasi lükata ja signaalide mõju sellele funktsioonile.








Funktsiooni Sleep() süntaks C-keeles



allkirjastamata int magama ( allkirjastamata int sek )

Funktsiooni Sleep() kirjeldus C-keeles

Funktsioon sleep() paneb protsessi või lõime sekundites unerežiimile, mis on määratud sisendargumendis „sec”, mis on märgita täisarv. Kui funktsioon sleep() on välja kutsutud, jääb helistamisprotsess unerežiimile kuni aegumiseni või signaali vastuvõtmiseni.



Seda funktsiooni kasutatakse sageli pikkade üle 1-sekundiliste viivituste jõustamiseks reaalajas protsesside täitmisel. Alla 1-sekundilise viivituse korral pakub POSIX mikrosekundi eraldusvõime funktsiooni usleep(), mis kasutab sama meetodi kutset nagu une(). Alla 1 mikrosekundilise viivituse korral on olemas ka funktsioon nanosleep () eraldusvõimega 1 nanosekund, kuid erineva kutsumismeetodiga, kus see kasutab viiteaja määramiseks sisendargumentidena 'timespec' struktuure.





Kui funktsioon sleep() on kulutanud kogu määratud aja, tagastab see tulemuseks 0. Kui täitmine katkestatakse signaali saabumisega enne määratud aja möödumist, tagastab see selle ajani jäänud sekundite arvu.

Funktsioon sleep() on määratletud päises “unistd.h”. Selle kasutamiseks peame selle faili koodi lisama järgmiselt:



#include

Kuidas protsessis Sleep() funktsiooniga viivitusi sisse viia

Selles näites loome taimeri, mis koosneb lõpmatust tsüklist, milles prindime käsukonsoolis teate „Möödunud aeg”, millele järgneb protsessi kulunud sekundid. Kõiki neid silmuseid korratakse iga 2 sekundi järel funktsiooni sleep() põhjustatud viivituse tõttu.

Selleks võtame tühja faili laiendiga “.c” ja lisame sinna päised “stdio.h” ja “unistd.h”. Seejärel avame tühja funktsiooni main() ja määratleme selles int tüüpi muutujad sekundid, mida kasutame kulunud aja loendurina.

Kui päised on sisestatud ja muutuja deklareeritud, avame lõpmatu tsükli ja kasutame selles funktsiooni printf() sõnumi ja ajaväärtuse kuvamiseks. Järgmisel real suurendame aja muutujat 2 võrra ja seejärel kutsume funktsiooni sleep () sisendargumendiks väärtusega 2. Nii kordub see tsükkel iga sekundi järel ja saame loenduri, mis kuvab ekraanil kulunud aja. Nüüd vaatame selle rakenduse koodi. Vaatame selle näite täielikku koodi:

#include
#include

tühine peamine ( )
{
int sekundit = 0 ;
samal ajal ( 1 )
{
printf ( 'Möödunud aeg: %i \n ' , sekundit ) ;
sekundit += 2 ;
magama ( 2 ) ;
}

}

Järgnevalt näeme pilti selle koodi koostamise ja täitmisega. Nagu näeme, prindib programm iga 2 sekundi järel ekraanile protsessi käivitamisest möödunud sekundid.

Signaalide mõju Sleep() funktsioonile

Selles näites tahame jälgida signaalide mõju protsessile, mis uinutatakse funktsiooni sleep() abil. Selleks loome lihtsa rakenduse, mis koosneb funktsioonist main() ja signaali 36 töötlejast.

Funktsiooni main() esimesel real deklareerime ülejäänud muutuja tüübiga int, kuhu salvestame funktsiooni sleep () poolt tagastatud väärtuse. Seejärel kasutame funktsiooni signal(), et siduda töötleja signaaliga 36. Järgmisel real kuvame protsessi PID, mida kasutame seejärel signaali saatmiseks teisest kestast protsessi. Lõpuks kutsume välja funktsiooni sleep () ja määrame selle sisendargumendiks 60 sekundit, mis on piisavalt pikk, et saata signaal teisest kestast. Ülejäänud muutuja saadame väljundargumendina funktsioonile sleep().

Signaalile 36 lisatud töötleja koosneb koodireast, kus funktsioon printf() prindib teate 'Jäänud aeg:', millele järgneb väärtus, mille funktsioon sleep() tagastab signaali protsessi saabumisel. Siin vaatame selle näite koodi.

#include
#include
#include
#include

tühine käitleja ( int allesjäänud ) ;

tühine peamine ( )
{
int allesjäänud ;
signaal ( 36 , käitleja ) ;
printf ( 'Protsessi ID: %i \n ' , getpid ( ) ) ;
allesjäänud = magama ( 60 ) ;
}

tühine käitleja ( int allesjäänud )

{
printf ( 'Jäänud aeg: %i \n ' , allesjäänud ) ;
}

Järgmine pilt, mida näeme, näitab selle koodi koostamist ja täitmist:

Et näha signaalide mõju selles protsessis, kompileerime selle koodi ja käivitame selle. Seejärel saadame teisest terminalist signaali järgmise süntaksiga:

tappa - n signaali PID

Järgmine pilt, mida näeme, näitab koodi täitmist eelmises konsoolis ja järgmisest konsoolist saadetud signaali saabumise mõju. Nagu näete, on signaal protsessi äratamisega funktsiooni Sleep() mõju maha surunud:

Järeldus

Selles Linuxhinti artiklis näitasime teile, kuidas kasutada funktsiooni sleep () protsessi teatud arvu sekunditeks magama panemiseks. Näitasime teile ka süntaksit ning funktsiooni ja kutsumismeetodi kirjeldust.

Kasutades praktilisi näiteid, koodijuppe ja pilte, näitasime teile, kuidas protsess unerežiimi panna ja mis mõjutab uneprotsessi signaali saabumisel funktsiooni sleep() abil.