alarm(int)不在while循环中工作

时间:2016-10-31 19:34:24

标签: c while-loop signals alarm

我试图执行此代码:

signal(SIGALRM,handler);
alarm(1);
while(1){}

handler功能只打印"测试"。

在这种情况下,

alarm(1)最终只会被执行一次。我试图把它放在循环中,似乎它根本没有被执行!

我对信号有点新意。有人可以向我解释这是怎么发生的吗?

1 个答案:

答案 0 :(得分:5)

如果您只是将alarm(1)放在示例中的循环中,那么您将在每次调用的几微秒内无限次地调用alarm(1)。然后发生this

  

如果警报已经设置了警报()但尚未发出,则另一次警报()呼叫将取代先前的呼叫。

即,在循环的每次迭代中清除警报。由于你的循环永远运行,警报永远不会永久设置。