当前位置: 技术问答>linux和unix
aupe中关于alarm的困惑
来源: 互联网 发布时间:2016-04-27
本文导语: aupe中关于alarm返回值的描述如下: 每个进程只能有一个闹钟时间。如果在调用alarm时,以前已为该进程设置过闹钟时间, 而且它还没有超时,则该闹钟时间的余留值作为本次alarm函数调用的值返回。以前登记的闹 ...
aupe中关于alarm返回值的描述如下:
每个进程只能有一个闹钟时间。如果在调用alarm时,以前已为该进程设置过闹钟时间,
而且它还没有超时,则该闹钟时间的余留值作为本次alarm函数调用的值返回。以前登记的闹
钟时间则被新值代换。
如果有以前登记的尚未超过的闹钟时间,而且seconds值是0,则取消以前的闹钟时间,其
余留值仍作为函数的返回值。
问题是:我写了个小程序验证结果却是:返回上个alarm的总时间,而不是剩余时间。
例如:alarm(10);
printf("time=%dn",alarm(5));
总是输出10
(以上只是说明问题,实际程序并非如此)
哪位大虾解释一下
最好附带个示例程序。
每个进程只能有一个闹钟时间。如果在调用alarm时,以前已为该进程设置过闹钟时间,
而且它还没有超时,则该闹钟时间的余留值作为本次alarm函数调用的值返回。以前登记的闹
钟时间则被新值代换。
如果有以前登记的尚未超过的闹钟时间,而且seconds值是0,则取消以前的闹钟时间,其
余留值仍作为函数的返回值。
问题是:我写了个小程序验证结果却是:返回上个alarm的总时间,而不是剩余时间。
例如:alarm(10);
printf("time=%dn",alarm(5));
总是输出10
(以上只是说明问题,实际程序并非如此)
哪位大虾解释一下
最好附带个示例程序。
|
表头文件 #include
定义函数 unsigned int alarm(unsigned int seconds);
函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。
返回值 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。
范例 #include
#include
void handler() {
printf(“hellon”);
}
main()
{
int i;
signal(SIGALRM,handler);
alarm(5);
for(i=1;i