欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Linux计时器_Linux系统使用C 实现计时函数

程序员文章站 2022-01-18 22:53:17
...

Linux中、系统为每个系统都维护了三种计时器、分别是真实计数器、虚拟计时器以及实用计时器、一般情况下都使用真实计时器


GETITIMER()/SETITIMER()//读取/设置内部计时器

#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);


which //具体的计时器类型

ITIMER_REAL :真实计时器统计进程消耗的真实时间 通过定时产生SIGALRM工作

ITIMER_VIRTUAL :虚拟计时器统计继承在用户态下消耗的时间 通过定时产生SIGVTALRM工作

ITIMER_PROF :实用计时器统计进程在用户态和内核态消耗的总时间 通过定时产生SIGPROF工作

new_value://结构体指针, 用于设计计时器的新值

old_value://结构体指针, 用于获取计时器的旧值


struct itimerval {
    struct timeval it_interval;         /* next value */
    struct timeval it_value;            /* current value */
};
struct timeval {
    long tv_sec;                        /* seconds */
    long tv_usec;                   /* microseconds *///10^6
}


实现代码

//timer
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/time.h>
#include<signal.h>
#include<sys/types.h>
void fa(int signo){
    printf("random
");
}
int main(){
    //设置对信号SIGALRM进行自定义处理
    if(SIG_ERR==signal(SIGALRM,fa))
        perror("signal"),exit(-1);
    struct itimerval timer;
    //设置间隔时间
    timer.it_interval.tv_sec=2;
    timer.it_interval.tv_usec=300000;
    //设置启动时间
    timer.it_value.tv_sec=5;
    timer.it_value.tv_usec=0;
    int res=setitimer(ITIMER_REAL,&timer,NULL);
    if(-1==res)
        perror("setitimer"),exit(-1);
    getchar();
    itimer.it_value.tv_sec=0;
    setitimer(ITIMER_REAL,&timer,NULL); //没有错误处理
    while(1);
    return 0;
}


通过以上代码就可以在Linux中定义一个计时器、是不是非常简单、大家可以以上的代码直接使用