定时器
系统为每个进程维护三个定时器:
-
真实计时器:进程运行的实际时间
-
虚拟计时器:进程运行在用户态所消耗的时间
-
实用计时器:进程运行在用户态和内核态消耗的时间之和
实际真正的时间(真实计时器) = 用户态时间 + 内核时间 + 睡眠时间 + 状态切换耗时
通过设置计时器的起始时间和重复间隔时间给进程设置定时事件,例如:定时保存、定时上传操作。
获取\设置定时器:
#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:指定哪个定时器,取值: ITIMER_REAL 真实计时器 SIGALRM(14) ITIMER_VIRTUAL 虚拟计时器 SIGVTALRM(26) ITIMER_PROF 实用计时器 SIGVTALRM(26) struct itimerval { struct timeval it_interval; // 间隔时间,定时器开启后,每间隔这个时间就会再发出一次定时器信号,一直重复 struct timeval it_value; // 开始时间,从该时间开始发送第一个定时器信号 }; // 时间结构体 struct timeval { time_t tv_sec; // 秒数 suseconds_t tv_usec; // 微秒,不能超过1000000 };
#include <stdio.h> #include <signal.h> #include <sys/time.h> void sigalrm(int num) { printf("闹钟响了!\n"); } int main(int argc,const char* argv[]) { signal(SIGALRM,sigalrm); // 准备定时方案 struct itimerval timer = { {1,500000}, {5,500000} }; // 设置定时器 setitimer(ITIMER_REAL,&timer,NULL); for(;;); }