Funkcia Sleep() v jazyku C

Funkcia Sleep V Jazyku C



Keď vyvíjame programy, ktoré vyžadujú interakciu používateľa, existujú prípady, kedy je potrebné upraviť systémové časy tak, aby bola aplikácia čitateľná a ľahko ovládateľná.

Napríklad, ak vyvíjame konzolovú aplikáciu, kde potrebujeme informovať používateľa o úlohách, ktoré sa vykonajú postupne, informačné správy by mali pretrvávať primeraný čas, aby si ich používateľ stihol prečítať predtým, ako budú vymazané. program prejde na ďalší príkaz.

V tomto článku Linuxhint sa dozviete, ako používať funkciu sleep() na vytváranie oneskorení v reálnom čase. Ukážeme vám syntax a popis tejto funkcie, ako aj možnosti, ktoré POSIX poskytuje na vytváranie oneskorení so zlomkami menšími ako sekunda. Potom vám pomocou praktických príkladov, kódov a obrázkov ukážeme, ako oddialiť vykonanie programu a vplyv signálov na túto funkciu.








Syntax funkcie Sleep() v jazyku C



nepodpísané int spať ( nepodpísané int sek )

Popis funkcie Sleep() v jazyku C

Funkcia sleep() uspí proces alebo vlákno na čas v sekundách, ktorý je špecifikovaný vo vstupnom argumente „sec“, čo je celé číslo bez znamienka. Po zavolaní funkcie sleep() sa volajúci proces uspí, kým nevyprší časový limit alebo kým neprijme signál.



Táto funkcia sa často používa na vynútenie dlhých oneskorení dlhších ako 1 sekunda pri vykonávaní procesov v reálnom čase. Pre oneskorenia menšie ako 1 sekunda poskytuje POSIX funkciu rozlíšenia v mikrosekundách, usleep(), ktorá používa rovnaké volanie metódy ako sleep(). Pre oneskorenia menšie ako 1 mikrosekundu existuje aj funkcia nanosleep() s rozlíšením 1 nanosekundu, ale s inou metódou volania, kde ako vstupné argumenty na nastavenie času oneskorenia používa štruktúry „timespec“.





Ak funkcia sleep() spotrebovala celý zadaný čas, ako výsledok vráti 0. Ak je vykonávanie prerušené príchodom signálu pred uplynutím určeného času, vráti zostávajúci počet sekúnd do tohto času.

Funkcia sleep() je definovaná v hlavičke „unistd.h“. Aby sme ho mohli použiť, musíme tento súbor zahrnúť do kódu takto:



#include

Ako zaviesť oneskorenia v procese pomocou funkcie Sleep()

V tomto príklade vytvoríme časovač, ktorý pozostáva z nekonečnej slučky, v ktorej vytlačíme správu „Uplynulý čas“ na príkazovej konzole, po ktorej nasledujú uplynulé sekundy procesu. Každá z týchto slučiek sa opakuje každé 2 sekundy kvôli oneskoreniu spôsobenému funkciou sleep().

Aby sme to urobili, vezmeme prázdny súbor s príponou „.c“ a pridáme do neho hlavičky „stdio.h“ a „unistd.h“. Potom otvoríme prázdnu funkciu main() a zadefinujeme v nej premenné sekundy typu int, ktoré použijeme ako počítadlo uplynutého času.

Po vložení hlavičiek a deklarovaní premennej otvoríme nekonečnú slučku a použijeme v nej funkciu printf() na zobrazenie správy a časovej hodnoty. Na ďalšom riadku zvýšime časovú premennú o 2 a potom zavoláme funkciu sleep() s hodnotou 2 ako vstupným argumentom. Týmto spôsobom sa tento cyklus opakuje každú sekundu a dostaneme počítadlo, ktoré zobrazuje uplynutý čas na obrazovke. Teraz sa pozrime na kód tejto aplikácie. Pozrime sa na úplný kód pre tento príklad:

#include
#include

neplatné Hlavná ( )
{
int sekúnd = 0 ;
zatiaľ čo ( 1 )
{
printf ( 'Uplynulý čas: %i \n ' , sekúnd ) ;
sekúnd += 2 ;
spať ( 2 ) ;
}

}

Ďalej uvidíme obrázok s kompiláciou a vykonaním tohto kódu. Ako vidíme, každé 2 sekundy program vypíše na obrazovku uplynuté sekundy od vykonania procesu.

Vplyv signálov na funkciu spánku ().

V tomto príklade chceme sledovať vplyv signálov na proces, ktorý sa uspí pomocou funkcie sleep(). Na tento účel vytvoríme jednoduchú aplikáciu, ktorá pozostáva z funkcie main() a obsluhy signálu 36.

V prvom riadku funkcie main() deklarujeme zvyšnú premennú typu int, kde uložíme hodnotu, ktorú vráti funkcia sleep(). Potom pomocou funkcie signal() naviažeme handler na signál 36. Na ďalšom riadku zobrazíme PID procesu, ktorý potom použijeme na odoslanie signálu z druhého shellu do procesu. Nakoniec zavoláme funkciu sleep() a nastavíme jej vstupný argument na 60 sekúnd, čo je dosť dlho na odoslanie signálu z druhého shellu. Zostávajúcu premennú pošleme ako výstupný argument funkcii sleep().

Obslužný program, ktorý je pripojený k signálu 36, pozostáva z riadku kódu, kde funkcia printf() vytlačí správu „Zostávajúci čas:“ nasledovanú hodnotou, ktorú vráti funkcia sleep() v čase, keď signál dorazí do procesu. Tu sa pozrime na kód pre tento príklad.

#include
#include
#include
#include

neplatné psovod ( int zostávajúce ) ;

neplatné Hlavná ( )
{
int zostávajúce ;
signál ( 36 , psovod ) ;
printf ( 'ID procesu: %i \n ' , getpid ( ) ) ;
zostávajúce = spať ( 60 ) ;
}

neplatné psovod ( int zostávajúce )

{
printf ( 'Zostávajúci čas: %i \n ' , zostávajúce ) ;
}

Nasledujúci obrázok, ktorý vidíme, ukazuje kompiláciu a spustenie tohto kódu:

Aby sme videli účinok signálov v tomto procese, skompilujeme tento kód a spustíme ho. Potom z druhého terminálu pošleme signál s nasledujúcou syntaxou:

zabiť - n signál PID

Nasledujúci obrázok, ktorý vidíme, ukazuje vykonanie kódu v predchádzajúcej konzole a efekty príchodu signálu, ktorý je odoslaný z nasledujúcej konzoly. Ako vidíte, signál potlačil účinok funkcie sleep() prebudením procesu:

Záver

V tomto článku Linuxhint sme vám ukázali, ako použiť funkciu sleep() na uspanie procesu na určený počet sekúnd. Ukázali sme si aj syntax, ako aj popis funkcie a metódy volania.

Pomocou praktických príkladov, úryvkov kódu a obrázkov sme vám pomocou funkcie sleep() ukázali, ako proces uspať a čo ovplyvňuje príchod signálu na spiaci proces.