Linux 定时器编程
本文主要介绍 Linux 应用层定时器的使用方法。
Linux 中提供的休眠函数是 sleep 和 alarm,但是他们仅仅提供以秒为单位的休眠,这中休眠有些进程显然太长了,那么怎样才能使进程以更小的时间分辨率休眠呢?
unsigned int sleep(unsigned int seconds);
unsigned int alarm(unsigned int seconds);
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
which 指定那种定时器。Linux提供3种定时器:
TIMER_REAL
:准确定时器,超时会发出SIGALRM信号;TIMER_VIRTUAL
:虚拟定时器,只记进程时间,所以会根据进程执行时间而变化,不能实现准确定时,超时发出SIGVTALRM信号;TIMER_PROF
:梗概计时器,它会根据进程时间和系统时间而变化,不能实现准确定时,超时发出SIGPROF信号;
在进程中应该捕捉 所设定时器会发出的信号,因为进程收到定时器超时发出的信号后,默认动作是终止。
结构体
struct itimerval {
struct timeval it_interval; /* Interval for periodic timer */
struct timeval it_value; /* Time until next expiration */
};
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};