完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在linux下提供了两种基本的timer机制:alARM和settimer。
1、alarm #include unsigned int alarm(unsigned int seconds); 这是个最简单的Timer,当调用了alarm(n)时,等待n秒后,就会触发一次SIGALRM信号,故需要在调用alarm函数前先设置好 SIGALRM信号对应的处理函数才行,而当调用alarm(0)时,表示停止当前的timer处理,不要发出SIGALRM信号。 返回值:返回上一次调用alarm函数的剩余秒好,若之前没有调用alarm函数,则返回0。 例(第一次等待1秒触发Timer,之后都是2秒触发): #include #include #include using namespace std; void my_alarm_handler(int a){ cerr<<"my_alarm_handler"< } int main(){ signal( SIGALRM, my_alarm_handler ); alarm(1); while(1){} return 0; } *********************** 2、settimer #include #define ITIMER_REAL 0 #define ITIMER_VIRTUAL 1 #define ITIMER_PROF 2 int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value,struct itimerval *ovalue); settimer和gettimer函数都提供了三种类别的Timer供使用: 1)、ITIMER_REAL:以系统实际的时间来计算,触发时会发出SIGALRM信号。 2)、ITIMER_VIRTUAL:只计算进程的执行时间(在用户态),触发时会发出SIGVTALRM信号。 3)、ITIMER_PROF:计算进程在用户态和内核态的处理时间,触发时会发出SIGPROF信号。 通过第一个参数which来指定要使用哪一种Timer(ITIMER_REAL、ITIMER_VIRTUAL、ITIMER_PROF)。 settimer函数是用来设置对应的Timer的触发时间是多少,而gettimer函数是用来获取上一次Timer设置的时间。设置的时间是一个结构 体struct itimerval: struct itimerval { struct timeval it_interval; struct timeval it_value; }; struct timeval { long tv_sec; long tv_usec; }; settimer由第二个参数value设置触发时间,第三个参数ovalue用来获取上一次settimer设置的itimerval值(该参数可以设 置为NULL)。对于itimerval里面变量的值,当我们设置it_interval的值为0时,Timer只会触发一次,而it_value设置为 0时则表示Timer结束。 返回值:0为成功,-1为失败。 例(第一次等待1秒触发Timer,之后都是2秒触发): #include #include #include using namespace std; void my_alarm_handler(int a){ cerr<<"test "< int main(){ struct itimerval t; t.it_interval.tv_usec = 0; t.it_interval.tv_sec = 2; t.it_value.tv_usec = 0; t.it_value.tv_sec = 1; if( setitimer( ITIMER_REAL, &t, NULL) < 0 ){ cerr<<"settimer error."< } signal( SIGALRM, my_alarm_handler ); while(1){ sleep(2); } return 0; } |
|
相关推荐
1个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4874 浏览 0 评论
87366 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4687 浏览 2 评论
3581 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2459 浏览 0 评论
1961浏览 3评论
这是i.mx6ull的关于usb的宏定义,能解释下这些宏定义的意思
1329浏览 1评论
1238浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1306浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1215浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 03:17 , Processed in 1.241044 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号