Linux 定时器

原文地址:http://www.dutor.net/index.php/2009/07/linux-timer/

Linux 为每个进程提供了三个定时器:

  • ITIMER_REAL: 给一个指定的时间间隔,按照实际的时间来计数,发出SIGALRM信号;
  • ITIMER_VIRTUAL: 当进程执行的时候才计数,发出SIGVTALRM信号;
  • ITIMER_PROF: 当进程执行或者是系统为进程调度的时候计数,发出SIGPROF信号。这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。

两个提供定时参数的结构体定义:

strcut timeval

{

    //~ 秒

    long tv_sec; 

    //~ 微秒

    long tv_usec; 

};

 

struct itimerval

{

    //~ 时间间隔

    struct timeval it_interval; 

    //~ 当前时间计数

    struct timeval it_value;  

};

一个Demo

#include <iostream>

#include <time.h>

#include <signal.h>

#include <sys/time.h>

using namespace std;

int cnt = 0;

 

void set_timer()

{

    struct itimerval itv, oldtv;

    //~ 定时间隔1秒0微秒

    itv.it_interval.tv_sec = 1;

    itv.it_interval.tv_usec = 0;

    //~ 初始计时

    itv.it_value = itv.it_interval;

    //~ 打开定时器ITIMER_REAL

    setitimer(ITIMER_REAL, &itv, &oldtv);

}

 

//~ 定时器中断处理程序入口

void sigalrm_handler(int sig)

{

    cnt++;

    printf("timer trigered .. %d \n", cnt);

}

 

 

int 

main()

{

    //~ 设定信号SIGALRM的处理函数

    signal(SIGALRM, sigalrm_handler);

    set_timer();

    while(true)

    {

	usleep(100000);

	cout<<"proceeding>>>"<<endl;

    }

    return 0;

}

你可能感兴趣的:(linux)