Sleep() funkcija C kalba

Sleep Funkcija C Kalba



Kai kuriame programas, kurioms reikalinga vartotojo sąveika, pasitaiko atvejų, kai reikia koreguoti sistemos laiką, kad programa būtų skaitoma ir paprasta naudoti.

Pavyzdžiui, jei kuriame konsolės programą, kurioje turime informuoti vartotoją apie užduotis, kurios bus vykdomos nuosekliai, informaciniai pranešimai turėtų išlikti protingą laiką, kad vartotojas turėtų laiko juos perskaityti prieš juos išvalydamas ir programa pereina prie kitos komandos.

Šiame „Linuxhint“ straipsnyje sužinosite, kaip naudoti funkciją „Sleep()“, kad sukurtumėte vėlavimus realiuoju laiku. Parodysime šios funkcijos sintaksę ir aprašą, taip pat POSIX teikiamas parinktis, kad būtų galima sukurti delsas, kurių trupmenos yra mažesnės nei sekundės. Tada, naudodami praktinius pavyzdžius, kodus ir paveikslėlius, parodysime, kaip atidėti programos vykdymą ir signalų poveikį šiai funkcijai.








Funkcijos Sleep() sintaksė C kalba



nepasirašytas tarpt miegoti ( nepasirašytas tarpt sek )

Funkcijos Sleep() aprašymas C kalba

Funkcija „sleep()“ užmigdo procesą arba giją tam laikui sekundėmis, kuris nurodytas įvesties argumente „sec“, kuris yra beženklis sveikasis skaičius. Kai iškviečiama funkcija „Sleep()“, skambinimo procesas užmigdomas tol, kol baigiasi laikas arba gaunamas signalas.



Ši funkcija dažnai naudojama ilgalaikiams, ilgesniems nei 1 sekundės, uždelsimams, vykdant procesus realiuoju laiku. Jei uždelsimas yra mažesnis nei 1 sekundė, POSIX suteikia mikrosekundžių skyros funkciją usleep(), kuri naudoja tą patį metodo iškvietimą kaip ir miegas(). Mažesniems nei 1 mikrosekundės uždelsimams taip pat yra funkcija nanosleep() su 1 nanosekundės skiriamąja geba, bet su kitu iškvietimo metodu, kai ji naudoja 'timespec' struktūras kaip įvesties argumentus delsos trukmei nustatyti.





Jei funkcija „sleep()“ sunaudojo visą nurodytą laiką, ji grąžina 0 kaip rezultatą. Jei vykdymas nutraukiamas dėl signalo atėjimo nepasibaigus nurodytam laikui, jis grąžina likusį sekundžių skaičių iki to laiko.

Funkcija „sleep()“ apibrėžta antraštėje „unistd.h“. Norėdami jį naudoti, turime įtraukti šį failą į kodą taip:



#include

Kaip įvesti vėlavimą procese naudojant funkciją „Sleep()“.

Šiame pavyzdyje sukuriame laikmatį, kurį sudaro begalinis ciklas, kuriame komandų konsolėje atspausdiname pranešimą „Praėjęs laikas“, o po to – praėjusias proceso sekundes. Kiekviena iš šių kilpų kartojasi kas 2 sekundes dėl uždelsimo, kurį sukelia funkcija „Sleep()“.

Norėdami tai padaryti, paimame tuščią failą su plėtiniu '.c' ir į jį įtraukiame antraštes 'stdio.h' ir 'unistd.h'. Tada atidarome tuščią funkciją main() ir joje apibrėžiame int tipo kintamąsias sekundes, kurias naudosime kaip praėjusio laiko skaitiklį.

Įterpus antraštes ir paskelbus kintamąjį, atidarome begalinę kilpą ir naudojame joje funkciją printf() pranešimui ir laiko reikšmei parodyti. Kitoje eilutėje padidiname laiko kintamąjį 2 ir iškviečiame funkciją „Sleep()“, kurios įvesties argumentas yra 2. Tokiu būdu šis ciklas kartojamas kas sekundę ir gauname skaitiklį, kuris ekrane rodo prabėgusį laiką. Dabar pažvelkime į šios programos kodą. Pažiūrėkime visą šio pavyzdžio kodą:

#include
#include

tuštuma pagrindinis ( )
{
tarpt sekundžių = 0 ;
kol ( 1 )
{
printf ( 'Praėjęs laikas: %i \n , sekundžių ) ;
sekundžių += 2 ;
miegoti ( 2 ) ;
}

}

Toliau pamatysime paveikslėlį su šio kodo sudarymu ir vykdymu. Kaip matome, kas 2 sekundes programa spausdina ekrane praėjusias sekundes nuo proceso vykdymo.

Signalų įtaka miego () funkcijai

Šiame pavyzdyje norime stebėti signalų poveikį procesui, kuris užmigdomas naudojant funkciją „Sleep()“. Norėdami tai padaryti, sukuriame paprastą programą, kurią sudaro pagrindinė () funkcija ir 36 signalo tvarkytuvas.

Pirmoje funkcijos main() eilutėje deklaruojame likusį int tipo kintamąjį, kuriame saugome reikšmę, kurią grąžina funkcija sleep(). Tada mes naudojame signal() funkciją, kad pririštume tvarkyklę prie 36 signalo. Kitoje eilutėje rodome proceso PID, kurį vėliau naudojame signalui iš antrojo apvalkalo siųsti procesui. Galiausiai iškviečiame funkciją „Sleep()“ ir nustatome jos įvesties argumentą į 60 sekundžių, pakankamai ilgai, kad būtų išsiųstas signalas iš antrojo apvalkalo. Likusį kintamąjį siunčiame kaip išvesties argumentą į „sleep“ ().

Prie 36 signalo prijungtą tvarkyklę sudaro kodo eilutė, kurioje funkcija printf() spausdina pranešimą „Liko laikas:“ ir reikšmę, kurią grąžina „sleep“ () tuo metu, kai signalas patenka į procesą. Pažvelkime į šio pavyzdžio kodą.

#include
#include
#include
#include

tuštuma prižiūrėtojas ( tarpt likę ) ;

tuštuma pagrindinis ( )
{
tarpt likę ;
signalas ( 36 , prižiūrėtojas ) ;
printf ( 'Proceso ID: %i \n , getpid ( ) ) ;
likę = miegoti ( 60 ) ;
}

tuštuma prižiūrėtojas ( tarpt likę )

{
printf ( 'Liko laikas: %i \n , likę ) ;
}

Šis vaizdas, kurį matome, rodo šio kodo kompiliavimą ir vykdymą:

Norėdami pamatyti signalų poveikį šiame procese, surenkame šį kodą ir paleidžiame. Tada iš antrojo terminalo siunčiame signalą su tokia sintaksė:

nužudyti - n signalo PID

Šiame paveikslėlyje, kurį matome, parodytas kodo vykdymas ankstesnėje konsolėje ir signalo, siunčiamo iš kitos konsolės, atvykimo poveikis. Kaip matote, signalas slopino miego () funkcijos poveikį, pažadindamas procesą:

Išvada

Šiame „Linuxhint“ straipsnyje parodėme, kaip naudoti funkciją „Sleep()“, kad procesas užmigdomas tam tikram sekundžių skaičiui. Taip pat parodėme sintaksę, funkcijos aprašymą ir iškvietimo metodą.

Naudodamiesi praktiniais pavyzdžiais, kodo fragmentais ir paveikslėliais, parodėme, kaip užmigdyti procesą ir kas turi įtakos signalo atėjimui miego procesui, naudojant funkciją „Sleep()“.