1 /*
2 setitimer()头文件#include<sys/time.h>
3 原型: int setitimer(int which,const struct itimerval *new value,struct itimerval *old value);
4 ##设置定时器(闹钟),可代替alarm函数,精度微妙us,可以实现周期定时
5
6 which: 1.自然定时: ITIMER_REAL 计算自然时间
7 2.虚拟空间计时(用户空间): ITIMER_VIRTUAL 只计算进程占用cpu时间
8 3.运行时计时(用户+内核): ITIMER_PROF 计算占用cpu及执行系统调用的时间
9 struct itimerval {
10 struct timeval it_interval; 下次定时的时间
11 struct timeval it_value; 当次定时的时间
12 };
13 struct timeval{
14 time_t tv_sec; 秒
15 suseconds_t tv_usec; 微妙
16 };
17
18 返回值:成功返回0;失败返回-1,设置errno
19 */
20 #include<stdlib.h>
21 #include<stdio.h>
22 #include<sys/time.h>
23 unsigned int my_alarm(unsigned int sec)
24 {
25 struct itimerval newtime,oldtime;
26 int ret;
27
28 newtime.it_value.tv_sec=sec;
29 newtime.it_value.tv_usec=0;
30 newtime.it_interval.tv_sec=0;
31 newtime.it_interval.tv_usec=0;
32
33 ret=setitimer(ITIMER_REAL,&newtime,&oldtime);
34 if(ret==-1){
35 perror("setitimer error\n");
36 exit(1);
37 }
38 return oldtime.it_value.tv_sec;
39 }
40 void main(void)
41 {
42 int i;
43 my_alarm(1);//使用setitimer()模拟alarm计算一秒内能打印多少个数
44 for(i=0;;i++){
45 printf("%d\n",i);
46 }
47 }
linux系统编程 signal—setitimer()精度us、周期定时
于 2022-03-22 14:13:16 首次发布