2015-11-01 68 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; 

注意警报文件说,也什么,如果您呼叫报警()之前再次任何电流报警已过期:“在任何情况下任何先前设置的警报()都会被取消。“因此,在你的循环中每秒钟拨打数百万次可能不是一个好主意,你不断重置闹钟。