定时器时间函数

struct itimerval:

      struct itimerval *new_value,其定义如下:

struct itimerval {

struct timeval it_interval;  /*next value*/

struct timeval it_value; /*current value*/

};

struct timeval {

long tv_sec; /*seconds*/

lonng tv_usec /*microseconds*/

};

和alarm函数类是,用于定时操作。

函数原型为

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

其中which参数表示类型,可选的值有:

  1. ITIMER_REAL:以系统真实的时间来计算,它送出SIGALRM信号。
  2. ITIMER_VIRTUAL:以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。
  3. ITIMER_PROF:以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。

old_value的值一般为NULL。

settimer工作机制是,先对it_value倒计时,当it_value为零时触发信号,然后重置为it_interval,继续对it_value倒计时,一直这样循环下去。

/***
setitimer.c
***/
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<signal.h> void myfunc(int signo)
{
puts("hello world.");
} int main()
{
struct itimerval it,oldit;
signal(SIGALRM,myfunc); it.it_value.tv_sec = ;
it.it_value.tv_usec = ; it.it_interval.tv_sec = ;
it.it_interval.tv_usec = ; if(setitimer(ITIMER_REAL,&it,&oldit) == -)
{
perror("setitimer error ");
exit();
} while();
return ;
}

运行结果:

root@ubuntu:/mnt/hgfs/ShareWindows/shiyanlou/C/Flappy_Bird# gcc setitimer.c -o setitimer

root@ubuntu:/mnt/hgfs/ShareWindows/shiyanlou/C/Flappy_Bird# ./setitimer

hello world.

hello world.

hello world.

hello world.

hello world.

hello world.

^C

执行之后,间隔5秒之后打印hello,world。然后在间隔三秒打印,后续的都是间隔3秒。

这里我们知道:new_value.it_interval是用来控制第一次定时时长,new_value.it_value是用来定时后续定时的时长,并且是程序不死就连续定时(即,信号被我们捕捉,不执行默认动作了)。

如果想知道定时器还有多久定到时间,再次调用setitimer函数,取出old_value可查看。

最新文章

  1. 关于vs2012、tfs2012、windows server 2008r2一些记录
  2. SQL语句-批量插入表(表数据插表)
  3. redis 安装并设置为开机启动服务
  4. C# 代码重启windows服务
  5. 13个Cat命令管理(显示,排序,建立)文件实例
  6. HDU5308-脑补-对拍
  7. jQuery购物车
  8. 赛博杯-HMI流水灯-stack
  9. [.net core] 在 Windows 中运行出现 WinHttpException: The parameter is incorrect
  10. oracle 主键,非空,检查,唯一,默认,外键约束
  11. Python 编码的一些问题
  12. python 基础篇
  13. JS基础:翻转数组
  14. 20165211 2017-2018-2 《Java程序设计》第2周学习总结
  15. 2018.09.09 bzoj3505: [Cqoi2014]数三角形(容斥原理+简单计数)
  16. Redis学习(1)--环境配置,安装JDK,MySQL,tomcat
  17. 在linux下安装并使用websocket
  18. Java 中 String 的构造方法
  19. 使用git提交代码的一些小心得
  20. 【OpenCV】SIFT原理与源码分析:关键点搜索与定位

热门文章

  1. 记一次在 Get 请求参数为 Null 值的折腾
  2. webpack+vue搭建vue项目
  3. HTML5新增元素和移除的元素?
  4. 智慧图携手DataPipeline,让实体商业更智慧!
  5. C++线程同步之事件(生产者与消费者问题)
  6. 必须使用适当的属性或方法修改“ContentType”标头
  7. 【DRF框架】认证组件
  8. Linux磁盘管理——directory tree与mount point
  9. PHP SplQueue 实现队列
  10. LeetCode - 82、删除排序链表中的重复元素 II