"闹钟"在linux上的消息

时间:2015-11-01 16:50:55

标签: c linux handler alarm

我正在研究用C语言编写的项目,而我正在使用警报。在代码的开头我使用sigaction()来初始化警报:

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

然后我用一个循环中的alarm()函数调用闹钟:

while(){
    alarm(mySeconds);
}

程序发送第一个警报并运行处理程序函数,但当他发送第二个警报时,输出流上会显示一条消息:

"Alarm clock"

我不知道为什么会这样。谢谢。

1 个答案:

答案 0 :(得分:3)

您将struct sigaction的大部分变量保留为未初始化,您需要执行

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

另请注意,如果您在任何当前警报到期之前再次呼叫alarm(),警报文档会说明什么:"无论如何,任何先前设置的闹钟()都会被取消。"。所以在你的循环中每秒调用数百万次可能不是一个好主意,你不断重置警报。