警报(int)在 while 循环中不起作用
alarm(int) doesn't work in a while loop
我正在尝试执行这段代码:
signal(SIGALRM,handler);
alarm(1);
while(1){}
handler
函数只打印 "test".
在这种情况下,alarm(1)
最终只会执行一次。我试着把它放在循环中,它似乎根本没有被执行!
我对信号有点陌生。有人可以向我解释这是怎么发生的吗?
如果您只是将 alarm(1)
放入示例的循环中,您将在每次调用的几微秒内无限多次调用 alarm(1)
。然后 this 发生:
If an alarm has already been set with alarm() but has not been delivered, another call to alarm() will supersede the prior call.
即,警报在循环的每次迭代中被清除。由于您的循环永远运行,因此永远不会永久设置警报。
我正在尝试执行这段代码:
signal(SIGALRM,handler);
alarm(1);
while(1){}
handler
函数只打印 "test".
alarm(1)
最终只会执行一次。我试着把它放在循环中,它似乎根本没有被执行!
我对信号有点陌生。有人可以向我解释这是怎么发生的吗?
如果您只是将 alarm(1)
放入示例的循环中,您将在每次调用的几微秒内无限多次调用 alarm(1)
。然后 this 发生:
If an alarm has already been set with alarm() but has not been delivered, another call to alarm() will supersede the prior call.
即,警报在循环的每次迭代中被清除。由于您的循环永远运行,因此永远不会永久设置警报。