2011年(13)
分类: LINUX
2011-04-28 17:57:10
最简单的定时器是alarm(),使用这个函数需要引入头文件
unsigned int alarm(unsigned int seconds);
调用这个函数后,会在seconds秒后,向进程发送一个SIGALRM信号。这个定时器精度不高,适用于对精度要求不高的场合。
对精度有要求的场合,应当使用setitimer()。
setitimer()是一个间歇定时器,由头文件
int setitimer(int which, const struct itimerval *value,struct itimerval *ovalue)
参数which是设定定时器的工作方式,它由如下几个值来决定工作方式:
ITIMER_REAL 测量真实时间。时间到了以后,内核发送SIGALRM给进程。
ITIMER_VIRTUAL 定时器在进程执行用户空间代码的时候时间才会减少。指定的进程时间耗尽以后,内核发送SIGVTALRM给进程。
ITIMER_PROF 定时器的时间只有在进程执行和内核为进程服务的时候才会减少,指定的时间过去以后,内核发送SIGPROF给进程。
value是一个指向结构itimerval的指针,itimerval的定义如下:
struct itimerval{
struct timeval it_interval;
struct timeval it_value;
};
timeval是一个提供微秒级精度的结构体。settimer()会设置一个市场为it_value时长的定时器。一旦时间结束,则内核会使用it_interval所指定的时长重启定时器。如果it_value到达0且it_interval设置为0,则内核不重启定时器。
当ovalue的值不为NULL时,会返回which类型的间歇定时器的前一个值。
函数执行成功返回0,否则返回-1,并且设置errno。
一个利用setitimer()设定定时器的函数示例: