2015-11-01 1 views
1

Я работаю над проектом, написанным на C, и я использую аварийные сигналы. В начале кода я использую sigaction() для инициализации тревоги:Сообщение «Будильник» на linux

struct sigaction sa; 
sa.sa_handler = alarm_handler; 
sigaction(SIGALRM, &sa, NULL); 

Затем я называю сигнал тревоги с функцией сигнала тревоги() в цикле:

while(){ 
    alarm(mySeconds); 
} 

Программа посылает первый сигнализации и выполняет функцию обработчика, но когда он посылает второй на выходном потоке появляется сообщение:

"Alarm clock" 

Я не знаю, почему это происходит постоянно. Спасибо.

ответ

3

Вы оставляете большинство переменные struct sigaction неинициализированным, что вам нужно сделать

struct sigaction sa; 
memset(&sa, 0, sizeof sa); 
sa.sa_handler = alarm_handler; 

Заметим также, что документация тревоги говорит, что если вы вызываете тревогу() еще раз, прежде чем любой ток тревоги истекло: "В любом случае, любой ранее установленный сигнал тревоги() отменяется. ". Так называя это миллионы раз в секунду, как в вашем цикле, вероятно, не очень хорошая идея, вы постоянно перезагружаете будильник.