linux为每个进程维护三种计时器,分别为真实计时器、虚拟计时器、实用计时器。他们三者的区别是:
真实计时器:计算程序运行的实际时间,包括程序运行在用户态消耗的时间+系统调用时间+程序睡眠时间;
虚拟计时器:计算的是程序运行在用户态消耗的时间,即真实计时器计算的时间-系统调用时间-程序睡眠时间;
实用计时器:计算的是程序运行在用户态消耗的时间+处于内核态消耗的时间。
具体函数:
头文件:#include<sys/time.h>
函数: int getitimer(int which,struct itimerval*curr_value);//获取定时器的设置
int setitimer(int which,const struct itimerval* new_value,struct itimerval*old_value);//设置定时器
返回值:成功返回0,失败返回-1.
参数含义:
参数which是指定具体ITIMER_REAL、ITIMER_VIRTUAL、ITIMER_PROF三种定时器的其中的哪个定时器。ITIMER_REAL对应真实定时器,计时器发送的时钟信号为SIGALRM,ITIMER_VIRTUAL对应的是虚拟计时器,计时器发送的时钟信号为SIGVTALRM,ITIMER_PROF对应的是实用计时器,计时器发送的时钟信号为SIGPROF.
getitimer的第二个参数curr_value为一个结构体的传出参数,用于获取该计时器的初始间隔时间和重复间隔时间。
setitimer的第二个参数new_value为一个结构体的传入参数,用于指定该定时器的初始间隔时间和重复间隔时间。参数old_value为一结构体的传出参数,用于传出以前定时器的时间设置(不需要可以设为NULL)。
struct itimerval{
struct timerval it_interval;//重复时间间隔
struct timerval it_value;//初始时间间隔
};
struct timerval{
long tv_sec;//时间的秒数部分
long tv_usec;//时间的微秒部分
};
为进程设置好一个定时器后,该计时器会定时的向进程发送时钟信号!!!