Linux计时器_Linux系统使用C 实现计时函数
2016-12-23 15:54:24  By: dwtedx

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中定义一个计时器、是不是非常简单、大家可以以上的代码直接使用

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


猜你喜欢的

快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+