我正在研究用C语言编写的项目,而我正在使用警报。在代码的开头我使用sigaction()来初始化警报:
struct sigaction sa;
sa.sa_handler = alarm_handler;
sigaction(SIGALRM, &sa, NULL);
然后我用一个循环中的alarm()函数调用闹钟:
while(){
alarm(mySeconds);
}
程序发送第一个警报并运行处理程序函数,但当他发送第二个警报时,输出流上会显示一条消息:
"Alarm clock"
我不知道为什么会这样。谢谢。
答案 0 :(得分:3)
您将struct sigaction
的大部分变量保留为未初始化,您需要执行
struct sigaction sa;
memset(&sa, 0, sizeof sa);
sa.sa_handler = alarm_handler;
另请注意,如果您在任何当前警报到期之前再次呼叫alarm(),警报文档会说明什么:"无论如何,任何先前设置的闹钟()都会被取消。"。所以在你的循环中每秒调用数百万次可能不是一个好主意,你不断重置警报。