我试图执行此代码:
signal(SIGALRM,handler);
alarm(1);
while(1){}
handler
功能只打印"测试"。
alarm(1)
最终只会被执行一次。我试图把它放在循环中,似乎它根本没有被执行!
我对信号有点新意。有人可以向我解释这是怎么发生的吗?
答案 0 :(得分:5)
如果您只是将alarm(1)
放在示例中的循环中,那么您将在每次调用的几微秒内无限次地调用alarm(1)
。然后发生this:
如果警报已经设置了警报()但尚未发出,则另一次警报()呼叫将取代先前的呼叫。
即,在循环的每次迭代中清除警报。由于你的循环永远运行,警报永远不会永久设置。