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