定时器并不是一种并发[线程],而是一种延迟,是一种异步,由当前线程执行,即如果定时器任务中有阻塞,会阻塞主线程。
alarm
gettimer/settimer
共同点:使用信号;
不同点:settimer可以自动重启和有三个独有模式,并且时间精度不仅仅只有秒。
#include <sys/time.h>
int settimer (int which,
const struct itimerval *value,
struct itimerval *ovalue);
// which ITIMER_REAL 测量真实时间,如果调试模式中,断点停止前时间不同,不同时间触发
// ITIMER_VIRTUAL 进程用户空间代码执行减少,指定的进程时间过去后
// ITIMER_PROF 与ITIMER_VIRTUAL共用,衡量进程消耗的用户时间和内核时间
// value itimerval
struct itimerval {
struct timeval it_interval; // 下一次delay时间
struct timeval it_value; // settimer设置一个过期时间为it_value的定时器
// 一旦时间超过it_value,内核使用it_interval的时长重启定时器
};
高级定时器[Linux系统编程 P372,这本书推荐反复读,但是其中不好的地方在于某些章节写了部详细,结构编排有点乱,例如高级