linux环境实现定时器----- itimerval实现
分析:实现定时器,通过itimerval结构体以及函数setitimer产生的信号,系统随之使用signal信号处理函数来处理产生的定时信号。从而实现定时器。
先看itimerval的结构体

struct itimerval{/* Value to put into `it_value' when the timer expires.  */struct timeval it_interval;/* Time to the next timer expiration.  */struct timeval it_value;};it_interval:代表定时器重新启动的间歇值
it_value:计时器安装后首先启动的初始值。struct timeval
{__time_t tv_sec;       /* Seconds.  */__suseconds_t tv_usec;   /* Microseconds.  */
};int setitimer (__itimer_which_t __which,const struct itimerval *__restrict __new,struct itimerval *__restrict __old)

setitimer()将value指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。

which:三种类型

ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。
ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。
ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EFAULT:value或ovalue是不有效的指针
EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一
实现代码:


#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>static int i;
void signal_handler(int signam)
{i++;printf("catch signal num is :%d\n",signam);printf("i = %d\n",i);
}void settimer()
{struct itimerval itv;//设置3s后开始定时itv.it_value.tv_sec = 3;itv.it_value.tv_usec = 0;//每1sitv.it_interval.tv_sec = 1;itv.it_interval.tv_usec = 0;setitimer(ITIMER_REAL,&itv,NULL);signal(SIGALRM,signal_handler);
}
int main()
{settimer();while (i < 20){;}return 0;
}

该代码实现的功能时3s后开启定时器,然后每隔1s向终端打印1的数值。直到20程序退出。结果应该打印出20个1且打印出捕捉的信号值。

这种方法需要注意的是,一个进程只能创建一个定时器

linux环境实现定时器----- itimerval实现相关推荐

  1. Linux 环境编程 用户层定时器使用二 timer_create的使用

    用户层定时器有两种,一种是timerfd,另一种是timer_create,前者比较新,使用比较方便. Linux环境编程 用户层定时器使用一 timerfd的使用 https://blog.csdn ...

  2. Linux环境编程多线程定时器、延时队列以及分布式定时器的现实与原理分析

    Linux环境编程多线程定时器.延时队列以及分布式定时器的现实与原理分析丨线程池丨中间件丨后端开发丨C/C++linux服务器开发 视频讲解如下,点击观看: Linux环境编程多线程定时器.延时队列以 ...

  3. Linux环境编程 用户层定时器使用一 timerfd的使用

    timerfd是linux提供的定时器机制,基于文件描述符,定时器精度最高可达纳秒级别,接口包括定时器创建.启动定时器.关闭定时器和删除定时器.下面介绍一下timerfd  API接口和一个结合epo ...

  4. Linux环境进程间通信(二): 信号--转载

    http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html http://www.ibm.com/developerworks ...

  5. Linux环境编程05

    目录 Linux环境编程05 一.信号相关基本概念 二.信号捕获 三.进程休眠信号 四.信号集和信号阻塞 五.附带数据信息的信号处理(较难) 六.定时器 Linux环境编程05 声明:本学习笔记为个人 ...

  6. Linux应用层的定时器Timer使用详解【转】

    转自:http://blog.csdn.net/wwwtovvv/article/details/8601528 版权声明:本文为博主原创文章,未经博主允许不得转载. linux下定时器的使用 -- ...

  7. Linux timer调用流程图,Linux应用层的定时器Timer使用详解【转】

    linux下定时器的使用-- alarm() & setitimer(): 1.alarm ------------------------------------------- 如果不要求很 ...

  8. Linux C: 定时器及时钟服务

    一.定时器种类 对于 Intel x86 有多个定时器: 1) 实时时钟 (RTC): RTC 由一个独立的小型备用电池供电.通常用于提供计算机的时间和日历信息.即使在计算机断电的情况下,RTC 还是 ...

  9. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

    Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...

最新文章

  1. 金士顿u盘量产工具_与时俱进,金士顿双接口优盘支持Type C接口
  2. 数据结构实验之链表一:顺序建立链表
  3. 图像归一化处理 相同像素_图像处理学习笔记(九)——灰度直方图及其均衡化(理论篇)...
  4. Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could n
  5. oracle ora-01001,ORA-01001 and ORACLE游标
  6. pythonstdin和stdout_如何使用os.execv()在python中继承stdin和stdout
  7. 苹果修复已遭在野利用的 iOS 和 macOS 0day
  8. WEB前端开发书籍推荐
  9. Backup--BUFFERSIZE 和BUFFERCOUNT
  10. 建造者2全部岛屿_勇者斗恶龙建造者2空荡岛流程攻略介绍
  11. go语言调用c 的头文件 so,golang 学习(10): 使用go语言调用c语言的so动态库-Go语言中文社区...
  12. 《软件工程之美》打卡第四周
  13. 蓝狐笔记:DeFi现在仍处在初级阶段 | FBEC 2020特别策划
  14. 详细图解3阶段事务提交及单点故障和网络脑裂问题
  15. 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例
  16. 智能辅助系统在配电室内的施工方案 安装位置
  17. VC 工程中包含 .c 或cpp文件编译时产生的.pch预编译头错误(C1853)
  18. 第一部分 思科九年 一(13)
  19. sdcms实现根据不同的分类下边显示子分类的导航
  20. 5gnr信号测试软件,通过锚点站判断5GNR基站的信号电平案例.docx

热门文章

  1. mysql有压缩函数吗_MySQL加密/压缩函数
  2. R循环有两个_学习R语言:性能提升——速度和内存
  3. Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator 题解(阅读理解+简单思维)
  4. python爬取网页源代码并存储到本地实例
  5. android自定义u形线,Android实战之自定义View折线图
  6. OSChina 周二乱弹 —— 理解超算排名这个事,竟然超出了很多人的智商
  7. 协程 进程_进程,线程,协程的关系
  8. 支付宝首席架构师程立:做架构就像造房打地基
  9. 项目上线 - 流程篇
  10. 136. 只出现一次的数字