在linux下提供了两种基本的Timer机制:alarm和settimer。

1、alarm
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
这是个最简单的Timer,当调用了alarm(n)时,等待n秒后,就会触发一次SIGALRM信号,故需要在调用alarm函数前先设置好 SIGALRM信号对应的处理函数才行,而当调用alarm(0)时,表示停止当前的timer处理,不要发出SIGALRM信号。
返回值:返回上一次调用alarm函数的剩余秒好,若之前没有调用alarm函数,则返回0。
例(第一次等待1秒触发Timer,之后都是2秒触发):
#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;
void my_alarm_handler(int a){
cerr<<"my_alarm_handler"<<endl;
alarm(2);//更改为2秒调用一次Timer
}
int main(){
signal( SIGALRM, my_alarm_handler );
alarm(1);
while(1){}
return 0;
}
2、settimer
#include <sys/time.h>
#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 <iostream>
#include <sys/time.h>
#include <signal.h>
using namespace std;
void my_alarm_handler(int a){
cerr<<"test "<<endl;
}
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."<<endl;
return -1;
}
signal( SIGALRM, my_alarm_handler );
while(1){
sleep(2);
}
return 0;
}
通过上面的例子,我们可以知道对于linux内建Timer只能同一时间处理3个Timer,如果需要多个的话,那么这就是个问题了。不过我们可以通过sleep函数或time函数来结合使用实现定时功能,具体可以参考:http://hi.baidu.com/adrain001/blog/item/60580bc40871d6a18226ace4.html
参考网址:
http://code.google.com/p/androidteam/wiki/TimerExample
http://hi.baidu.com/adrain001/blog/item/6d488b63ff13fe680c33fae6.html
http://www.ezloo.com/2008/05/linux_timer.html
http://blog.sina.com.cn/s/blog_66a6a5ec0100koc0.html

http://hi.baidu.com/susdisk/blog/item/03f70d35e8e2e182a61e1288.html
(本文转自http://blog.sina.com.cn/s/blog_3e4774e30100puh4.html)

[转] Linux应用层的定时器Timer相关推荐

  1. Linux应用层的定时器Timer使用详解【转】

    转自:http://blog.csdn.net/wwwtovvv/article/details/8601528 版权声明:本文为博主原创文章,未经博主允许不得转载. linux下定时器的使用 -- ...

  2. Linux timer调用流程图,Linux应用层的定时器Timer使用详解【转】

    linux下定时器的使用-- alarm() & setitimer(): 1.alarm ------------------------------------------- 如果不要求很 ...

  3. linux系统中定时器使用方法,Linux下实现定时器Timer的几种方法

    使用sleep()和usleep() 其中sleep精度是1秒,usleep精度是1微妙,具体代码就不写了.使用这种方法缺点比较明显,在Linux系统中,sleep类函数不能保证精度,尤其在系统负载比 ...

  4. linux定时器回调处理过程,Linux内核系统定时器TIMER实现过程分析

    可见涉及到系统定时器的数据结构并不多,那么:对于一个linux系统中,定时器个数可能会很多,而且每个定时器的超时事件时间并不相同,所以如何管理和处理定时器超时事件,关系到内核性能的高低.它根据不同的定 ...

  5. linux 多个定时器,timer: 一个Linux下的超级精简的多重定时器:可实现成千上万个定时任务,定时精度可达纳秒级别,且同一时间点可添加不同的任务!适用于云后台服务和嵌入式等各种环境。...

    MT_Timer(MT译为Multiple或Multi) 一.介绍 一个Linux下的超级简洁的定时器:利用epoll机制和timerfd新特性实现的多重.多用.多个定时任务实现.只需要使用TIMER ...

  6. Linux内核深入理解定时器和时间管理(4):定时器 timer

    Linux内核深入理解定时器和时间管理 定时器 timer rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 1. Timers This is fourth part ...

  7. 2022-10-20 Linux自带LED灯驱动gpio-leds 心跳呼吸灯heartbeat、定时器timer的使用

    一.测试环境:Android 9 系统 二.驱动文件在\kernel\drivers\leds\leds-gpio.c 三.dts的官方配置文档 kernel\Documentation\device ...

  8. Linux 应用层的时间编程【转】

    转自:https://blog.csdn.net/chinalj2009/article/details/21223681 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层 ...

  9. linux 时间与定时器编程原理,浅析 Linux 中的时间编程和实现原理-嵌入式-火龙果软件工程...

    引子 我们都生活在时间中,但却无法去思考它.什么是时间呢?似乎这是一个永远也不能被回答的问题.然而作为一个程序员,在工作中,总有那么几次我必须思考什么是时间.比如,需要知道一段代码运行了多久:要在 l ...

最新文章

  1. 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的
  2. 谈谈对线程与进程的理解
  3. python实时得到鼠标的位置
  4. java 动态创建实例_java – 有没有办法动态创建类(而不是实例)?
  5. 请求的站点不可用或找不到_80%的500强用企业微信,企业越来越找不到拒绝用它的理由...
  6. php命令执行无法重定向输出,PHP标头重定向无法正常工作
  7. nginx 实现Web应用程序的负载均衡
  8. 201671010433 | 词频统计软件项目报告
  9. iOS上应用Static Framework
  10. ant压缩html,ant+yuicompressor压缩js/css
  11. 遥控器,未来世界的入口?
  12. 爱了,这18个 Python 高效编程技巧真香
  13. 脱离低级趣味- Python ‘\r‘, ‘\n‘, ‘\r\n‘ 的彻底理解
  14. word中如何将所有一级标题统一格式(转载)
  15. Python爬虫编程实践--task01
  16. python 逻辑回归 复杂抽样_逻辑回归(Logistic Regression) ----转载
  17. 软件分享|eCognition9.0下载
  18. 塔式、刀片和机架:三种类型的服务器介绍
  19. 微信小程序合法域名配置
  20. plotly | python可视化进阶之路

热门文章

  1. json 文档拆分工具_如何把PDF多页文档拆为单页?快看高手私藏实用的技巧
  2. 简单又帅气的折纸机器人教程_几张纸做出帅气纸飞机,做法简单飞行速度超快,手工折纸飞机...
  3. Non-Rigid Registration Under Isometric Deformations
  4. ubuntu中的大小写
  5. qt-opensource-windows-x86-vs2010-4.8.6 + qt-creator-windows-opensource-2.8.0
  6. pytorch-数据增强的trick
  7. 鼠标控制程序,按住shift显示S,按住Ctrl显示C,按键盘显示D,松开键盘显示U
  8. java cookie共享_cookie共享
  9. 最佳深度学习书单(从零到深度学习工程师)
  10. python中max函数用法_python奇技淫巧——max/min函数的用法