你的付出的努力越多,得到的越多。你盖好了,他们就来了。
1. 定时器概念
定时器是进程规划自己在未来某一时刻接获通知的一种机制;定时器的调度及精度取决于当前负载和对进程的调度,系统可能会在定时器到期的瞬间(通常是几分之一秒)之后才去调用所属进程。
2. 使用UNIX API实现的定时器
-
代码示例
#include<sys/time.h> #include<stdio.h> #include<string.h> #include<signal.h> static int count = 0; static void sigAlarmHander(int sig) { printf("count = %d\n",count); count++; fflush(stdout); } int main() { int s; struct itimerval timerVal; struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = sigAlarmHander; //周期性执行,执行周期间隔数 timerVal.it_interval.tv_sec = 10; timerVal.it_interval.tv_usec = 0; //定时器第一次生效的时间间隔 timerVal.it_value.tv_sec = 6; timerVal.it_value.tv_usec = 0; //创建定时器 s = setitimer(ITIMER_REAL,&timerVal,NULL); if(s != 0) { printf("create timer fail!"); return -1; } s = sigaction(SIGALRM,&sa,NULL); //捕获定时器发送的信号 if(-1 == s) { printf("create sig action fail!"); return -1; } while(1); return 0; }
-
执行时间间隔图
-
调用alarm()实现定时执行(只执行一次)
#include<unistd.h> #include<signal.h> #include<stdio.h> static int count = 0; static void sigAlarmHander(int sig) { printf("count = %d\n",count); count++; fflush(stdout); } int main() { struct sigaction sa; int s; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = sigAlarmHander; s = sigaction(SIGALRM,&sa,NULL); //捕获定时器发送的信号 if(-1 == s) { printf("create sig action fail!"); return -1; } alarm(2); while(1); return 0; }