用alarm检测并处理代码执行超时
2015-11-13 13:32
253 查看
alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。
所需头文件
#include<unistd.h>
函数原型
unsigned int alarm(unsigned int seconds)
函数参数
seconds:指定秒数
函数返回值
成功:如果调用此alarm()前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。
出错:-1
代码
#include<unistd.h>
#include<signal.h>
void handler()
{
printf("Hello\n");
signal(SIGALRM, handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(5);
}
void main()
{
int i;
handler();
for(i=1;i<21;i++)
{
printf("sleep %d ...\n",i);
sleep(1);
}
}
结果:刚开始在main中执行一次,然后每隔5秒执行一次handler()
Hello
sleep 1 ...
sleep 2 ...
sleep 3 ...
sleep 4 ...
sleep 5 ...
Hello
sleep 6 ...
sleep 7 ...
sleep 8 ...
sleep 9 ...
sleep 10 ...
Hello
sleep 11 ...
sleep 12 ...
sleep 13 ...
sleep 14 ...
sleep 15 ...
Hello
sleep 16 ...
sleep 17 ...
sleep 18 ...
sleep 19 ...
sleep 20 ...
Hello
注意:alarm只设定一个闹钟,时间到达并执行其注册函数之后,闹钟便失效。如果想循环设置闹钟,需在其注册函数中在调用alarm函数。
所需头文件
#include<unistd.h>
函数原型
unsigned int alarm(unsigned int seconds)
函数参数
seconds:指定秒数
函数返回值
成功:如果调用此alarm()前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。
出错:-1
代码
#include<unistd.h>
#include<signal.h>
void handler()
{
printf("Hello\n");
signal(SIGALRM, handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(5);
}
void main()
{
int i;
handler();
for(i=1;i<21;i++)
{
printf("sleep %d ...\n",i);
sleep(1);
}
}
结果:刚开始在main中执行一次,然后每隔5秒执行一次handler()
Hello
sleep 1 ...
sleep 2 ...
sleep 3 ...
sleep 4 ...
sleep 5 ...
Hello
sleep 6 ...
sleep 7 ...
sleep 8 ...
sleep 9 ...
sleep 10 ...
Hello
sleep 11 ...
sleep 12 ...
sleep 13 ...
sleep 14 ...
sleep 15 ...
Hello
sleep 16 ...
sleep 17 ...
sleep 18 ...
sleep 19 ...
sleep 20 ...
Hello
注意:alarm只设定一个闹钟,时间到达并执行其注册函数之后,闹钟便失效。如果想循环设置闹钟,需在其注册函数中在调用alarm函数。
相关文章推荐
- 如何将已有文件导入eclipse中
- PHP解析XML
- 用java开发简易接口测试工具
- Python基础(二)
- c语言命令行参数
- ActiveMQ入门示例
- Python基础(一)
- python 读取utf8文件
- 各种排序算法的分析及java实现
- idea 编程实用快捷键
- mysql,sql的Java连接方法(简单应用)执行sql查询与预处理
- 蓝桥杯练手之高斯日记
- Java基础学习总结(36)——Java注释模板
- Java基础学习总结(36)——Java注释模板
- Java基础学习总结(36)——Java注释模板
- Go中nil
- Java注释模板
- Python itertools的使用
- java 中的 4 种访问权限有哪些?分别作用范围是什么?
- 编程语言小传之 一.最早的编程语言——机器语言