原文地址: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;
} |
完