alarm(int)在while循环中不起作用

bse*_*lla 1 c signals while-loop alarm

我正在尝试执行此代码:

signal(SIGALRM,handler);
alarm(1);
while(1){}
Run Code Online (Sandbox Code Playgroud)

handler功能只打印"测试".

alarm(1)在这种情况下,最终只会执行一次.我试着把它放在循环中,似乎它根本没有被执行!

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

chr*_*ock 5

如果你只是alarm(1)在你的例子中放入循环,你将alarm(1)在每次调用的几微秒内无限次地调用.然后发生这种情况:

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

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

  • @downvoter为什么要downvote?真正有兴趣知道答案对我来说似乎很好. (3认同)
  • @Elirovi在现实生活中,因为你已经醒来,立即设置闹钟是什么意思?同样在这里.警报的重点是唤醒你*以后*. (2认同)