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;
}

posted @ 2011-08-05 18:41  wangkangluo1  阅读(380)  评论(0编辑  收藏  举报