I'm working on a project written in C and I'm using alarms. In the beginning of the code I use sigaction() to initialize the alarm:
struct sigaction sa;
sa.sa_handler = alarm_handler;
sigaction(SIGALRM, &sa, NULL);
Then I call the alarm with the alarm() function in a loop:
while(){
alarm(mySeconds);
}
The program sends the first alarm and runs the handler function, but when he sends the second one a message appears on the output stream:
"Alarm clock"
I don't know why this keeps happening. Thank you.
You leave most the variables of struct sigaction
uninitialized, you need to do
struct sigaction sa;
memset(&sa, 0, sizeof sa);
sa.sa_handler = alarm_handler;
Note also what the alarm documentation says if you are calling alarm() again before any current alarm has expired: " In any event any previously set alarm() is canceled.". So calling it millions of times a second like in your loop is probably not a good idea, you're constantly resetting the alarm.