本文共 3043 字,大约阅读时间需要 10 分钟。
间隔定时器 setitimer 有一些重要的缺点,POSIX Timer 对 setitimer 进行了增强,克服了 setitimer 的诸多问题:
备注:通过kill –l可以查看系统支持的所有信号列表。编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
函数名 | 功能描述 |
timer_create | 创建一个新的 Timer;并且指定定时器到时通知机制 |
timer_delete | 删除一个 Timer |
timer_gettime | Get the time remaining on a POSIX.1b interval timer |
timer_settime | 开始或者停止某个定时器。 |
timer_getoverrun | 获取丢失的定时通知个数。 |
使用 Posix Timer 的基本流程很简单,首先创建一个 Timer。创建的时候可以指定该 Timer 的一些特性,比如 clock ID。clock ID 即 Timer 的种类,可以为下表中的任意一种:
POSIX Timer clock ID
Clock ID | 描述 |
CLOCK_REALTIME | Settable system-wide real-time clock; |
CLOCK_MONOTONIC | Nonsettable monotonic clock |
CLOCK_PROCESS_CPUTIME_ID | Per-process CPU-time clock |
CLOCK_THREAD_CPUTIME_ID | Per-thread CPU-time clock |
设置到期通知方式
timer_create 的第二个参数 struct sigevent 用来设置定时器到时时的通知方式。该数据结构如下:
结构sigevent
struct sigevent { int sigev_notify; /* Notification method */ int sigev_signo; /* Notification signal */ union sigval sigev_value; /* Data passed with notification */ void (*sigev_notify_function) (union sigval); /* Function used for thread notification (SIGEV_THREAD) */ void *sigev_notify_attributes; /* Attributes for notification thread (SIGEV_THREAD) */ pid_t sigev_notify_thread_id; /* ID of thread to signal (SIGEV_THREAD_ID) */ };
其中sigev_notify 表示通知方式,有如下几种:
POSIX Timer 到期通知方式
通知方式 | 描述 |
SIGEV_NONE | 定时器到期时不产生通知。。。 |
SIGEV_SIGNAL | 定时器到期时将给进程投递一个信号,sigev_signo 可以用来指定使用什么信号。 |
SIGEV_THREAD | 定时器到期时将启动新的线程进行需要的处理 |
SIGEV_THREAD_ID(仅针对 Linux) | 定时器到期时将向指定线程发送信号。 |
————————————————
版权声明:本文为CSDN博主「许振坪」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/benkaoya/java/article/details/17342711