1. POSIX Timer与setitimer的比较
间隔定时器setitimer有一些重要缺点:
- 一个进程同一时刻只能有一个timer,假如应用需要同时维护多个Interval不同的计时器,需要自己写代码来维护,非常不方便。而使用POSIX Timer,一个进程可以创建任意多个Timer。
- Setitimer计时器时间到达,只能使用信号方式通知使用timer的进程,而POSIX timer可以有多种通知方式,比如信号,或者启动线程。
- 使用setitimer时,通知信号的类别不能改变:SIGALRAM,SIGPROF等都为传统信号,而不是实时信号,因此会有time overrun的问题,而POSIX Timer则可以使用实时信号【1】。
- Setitimer的精度是ms,而POSIX Timer是针对有实时要求的应用所设计的,接口支持ns级别的始终精度。
【1】 实时信号之所以是可靠的,是因为在进程阻塞该信号的时间内,发给该进程的所有实时信号会排队,而非实时信号则会合并为一个信号。利用kill –l 可查询所有信号,其中SIGHUP(1) ~ SIGSYS(31)是不可靠信号,而SIGRIMIN(33)~SIGRTMAX(64)是可靠信号,也称为实时信号。
参考:
http://blog.csdn.net/hbhhww/article/details/7352723
http://blog.chinaunix.net/uid-25002135-id-3300821.html
2. POSIX Timer使用方法
函数名 | 功能描述 |
---|---|
timer_create | 创建一个新的Timer;并指定定时器的通知机制 |
timer_delete | 删除一个Timer |
timer_gettime | Get the time remaning on a POSIX.1b interval timer |
timer_settime | 开始或停止某个定时器 |
tiemr_getoverrun | 获取丢失的定时通知个数 |