"Alarm clock" 消息 linux

"Alarm clock" message on linux

我正在做一个用 C 编写的项目,我正在使用警报。在代码的开头,我使用 sigaction() 来初始化警报:

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

然后我在循环中使用 alarm() 函数调用闹钟:

while(){
    alarm(mySeconds);
}

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

"Alarm clock"

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

你让 struct sigaction 的大部分变量未初始化,你需要做

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

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