Linux计时器

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 //具体的计时器类型

  1. ITIMER_REAL :真实计时器
    • 统计进程消耗的真实时间
    • 通过定时产生SIGALRM工作
  2. ITIMER_VIRTUAL :虚拟计时器
    • 统计继承在用户态下消耗的时间
    • 通过定时产生SIGVTALRM工作
  3. 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\n");
}
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值