(笔记)linux下的真实计时器、虚拟计时器、实用计时器

时间:2021-06-16 20:34:03

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;//时间的微秒部分

};

  


为进程设置好一个定时器后,该计时器会定时的向进程发送时钟信号!!!