Ц Програмирање

Како се користи СИГАЛРМ и функција аларма на језику Ц?

Како се користи СИГАЛРМ и функција аларма на језику Ц?
Тхе алармни() функција се користи за генерисање а СИГАЛРМ сигнал након одређеног времена. У овом чланку ћемо вам показати како се користи алармни() функција и СИГАЛРМ сигнал у Линуку. Па, кренимо.

Синтакса

непотписани инт аларм (непотписане инт секунде)

Функција је дефинисана у унистд.х датотека заглавља.

Аргументи

Функција узима један аргумент, секунде. После секунде од захтева за. протекло је неколико секунди алармни() функција, СИГАЛРМ генерише се сигнал. Подразумевано понашање по пријему СИГАЛРМ је окончање процеса. Али, ми можемо ухватити и носити се са сигналом. Погледајте детаље о руковању сигналом.

Тхе алармни() функција ће вратити вредност која није нула ако је претходно постављен други аларм и ако је вредност преостали број секунди за претходни заказани аларм због испорученог аларма. Иначе алармни() вратиће нулу.

Пример1.ц:

#инцлуде
#инцлуде
#инцлуде
 
воид сиг_хандлер (инт сигнум)
 
принтф ("Унутрашња функција руковаоца \ н");

 
инт маин ()
 
сигнал (СИГАЛРМ, сиг_хандлер); // Региструј обрађивач сигнала
 
аларм (2); // Планирани аларм након 2 секунде
 
за (инт и = 1 ;; и ++)
 
принтф ("% д: Унутар главне функције \ н", и);
спавање (1); // Одлагање за 1 секунду

ретурн 0;

На снимку екрана резултата Пример1.ц, програм се изводи помоћу команде тиме, тако да можемо добити преглед времена извршења програма. Приметили смо да у главној функцији коју зовемо алармни() функција, заказана за 2 секунде. Дакле, фор петља се извршава, након 2 секунде позива се функција сиг_хандлер и извршавање главне функције је паузирано. Након извршења функције сиг_хандлер, у главној функцији за извршавање петље се наставља. Овде користимо функцију спавања за одлагање како бисмо могли да разумемо ток извршења. Петља фор је бесконачна, када притиснемо тастер за прекидање (Цтрл + Ц), извршење ће се зауставити.

Генерисање СИГАЛРМ Користећи сигнал () функција се не може слагати. Само један СИГАЛРМ генерација се може заказати. Узастопни позиви корисника сигнал () функција ресетује будилник процеса позива.

Пример2.ц:

#инцлуде
#инцлуде
#инцлуде
 
воид сиг_хандлер (инт сигнум)
 
принтф ("Унутрашња функција руковаоца \ н");

 
инт маин ()
 
сигнал (СИГАЛРМ, сиг_хандлер); // Региструј обрађивач сигнала
 
аларм (4); // Планирани аларм након 4 секунде
аларм (1); // Планирани аларм након 1 секунде
 
за (инт и = 1 ;; и ++)
 
принтф ("% д: Унутар главне функције \ н", и);
спавање (1); // Одлагање за 1 секунду

 
ретурн 0;

На снимку екрана резултата Пример2.ц, можемо видети да је програм извршио више од 7 секунди, али први аларм који је био заказан након 4 секунде не позива функцију руковаоца. Други аларм који је заказан након 1 секунде ресетује аларм.

Ако је вредност секунди аргумента нула, тада се отказује било који претходно поднет захтев за алармом.

Пример3.ц:

#инцлуде
#инцлуде
#инцлуде
 
воид сиг_хандлер (инт сигнум)
 
принтф ("Унутрашња функција руковаоца \ н");

 
инт маин ()
 
сигнал (СИГАЛРМ, сиг_хандлер); // Региструј обрађивач сигнала
 
аларм (2); // Планирани аларм након 2 секунде
аларм (0); // Отказао претходни аларм
 
за (инт и = 1 ;; и ++)
 
принтф ("% д: Унутар главне функције \ н", и);
спавање (1); // Одлагање за 1 секунду

 
ретурн 0;

На снимку екрана резултата Пример3.ц, можемо видети да је први аларм који је заказан након 2 секунде отказан због другог аларма за 0 секунди.

У Пример4.ц видећемо како непрекидно можемо да подесимо аларм на сваке 2 секунде.

Пример4.ц:

#инцлуде
#инцлуде
#инцлуде
 
воид сиг_хандлер (инт сигнум)
 
принтф ("Унутрашња функција руковаоца \ н");
 
аларм (2); // Закажите нови аларм након 2 секунде

 
инт маин ()
 
сигнал (СИГАЛРМ, сиг_хандлер); // Региструј обрађивач сигнала
 
аларм (2); // Закажите први аларм након 2 секунде
 
за (инт и = 1 ;; и ++)
 
принтф ("% д: Унутар главне функције \ н", и);
пауза (); // чека док се не обради сигнал

 
ретурн 0;

На снимку екрана резултата Пример4.ц, можемо видети да је аларм непрекидан у сваке 2 секунде. Ресетујемо аларм у функцији сиг_хандлер.

У Пример5.ц видећемо како можемо да одложимо аларм који је већ заказан. За прекид ћемо користити сигнал СИГИНТ. Када корисник укуца Цтрл + Ц на тастатури, ЗНАК сигнал ће генерисати.

Пример5.ц:

#инцлуде
#инцлуде
#инцлуде
 
воид сиг_хандлер (инт сигнум)
 
иф (сигнум == СИГАЛРМ) // руковатељ сигналом за СИГАЛРМ
 
принтф ("Унутар функција руковаоца за СИГАЛРМ \ н");
аларм (2);

иф (сигнум == СИГИНТ) // руковатељ сигналом за СИГИНТ
принтф ("\ нДремање на 5 секунди ... \ н");
аларм (5);

 

 
инт маин ()
 
сигнал (СИГАЛРМ, сиг_хандлер); // Региструј обрађивач сигнала за СИГАЛРМ
сигнал (СИГИНТ, сиг_хандлер); // Региструј обрађивач сигнала за СИГИНТ
 
аларм (2); // Закажите први аларм након 2 секунде
 
за (инт и = 1 ;; и ++)
 
принтф ("% д: Унутар главне функције \ н", и);
пауза (); // чека док се не обради сигнал

 
ретурн 0;

На снимку екрана резултата Пример5.ц, можемо видети да када се тип корисника Цтрл + Ц аларм ресетује за 5 секунди. У овом програму користили смо само једну функцију руковаоца за два различита сигнала, али у функцији руковаоца је проверено да ли се за који сигнал позива функција руковаоца.

Закључак:

Дакле, видели смо како се функција аларма може поставити за активирање сигнала, како ресетовати аларм, како отказати већ заказани аларм.

Како променити показивач миша и величину, боју и шему курсора на Виндовс 10
Показивач миша и курсор у оперативном систему Виндовс 10 су врло важни аспекти оперативног система. То се може рећи и за друге оперативне системе, так...
Бесплатни и отворени кодни покретачки програми за развој Линук игара
Овај чланак ће обухватити листу бесплатних покретача игара отвореног кода који се могу користити за развој 2Д и 3Д игара на Линуку. Бројни су такви мо...
Водич за сенку Томб Раидера за Линук
Схадов оф тхе Томб Раидер је дванаести додатак серији Томб Раидер - акцијско-авантуристичкој игри коју је створио Еидос Монтреал. И критичари и фанови...