定时器时间函数

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可查看。

setitimer()函数的更多相关文章

  1. UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数

    一.kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int ...

  2. setitimer函数

    和alarm函数类似,都用于定时操作: 函数原型:int setitimer(int which, const struct itimerval *new_value, struct itimerva ...

  3. Linux系统编程-setitimer函数

    功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, cons ...

  4. setitimer()函数使用

    setitimer()为Linux的API,并非C语言的Standard Library,setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间格一段时间就执行某个 ...

  5. Signal ()函数详细介绍 Linux函数

    http://blog.csdn.net/ta893115871/article/details/7475095 Signal ()函数详细介绍 Linux函数 signal()函数理解 在<s ...

  6. linux c setitimer使用方法说明

    在linux c编程中.setitimer是一个比較经常使用的函数.可用来实现延时和定时的功能,网上有各种零零散散的使用方法说明,都仅仅提到了个别使用方法,今天抽出时间实践整理了一份比較具体的: 使用 ...

  7. Signal ()函数详细介绍 Linux函数(转)

    Signal ()函数详细介绍 Linux函数 收藏人:紫火神兵     2012-09-27 | 阅:5659  转:22    |   来源   |  分享               signa ...

  8. 转:函数signal()

    from:http://blog.sina.com.cn/s/blog_4b226b92010119l5.html 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收 ...

  9. linux几种定时函数的使用

    Linux定时函数介绍: 在程序开发过程中,我们时不时要用到一些定时器,通常如果时间精度要求不高,可以使用sleep,uslepp函数让进程睡眠一段时间来实现定时, 前者单位为秒(s),后者为微妙(u ...

随机推荐

  1. selenium用法详解以chrome为例

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...

  2. iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码

    本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFi ...

  3. vue初级使用

    一.Vue是什么? Vue(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.采用自底向上增量开发的设计.Vue.js 的目标是通过尽可能简单的 API 实现响应 ...

  4. git 命令删除文件操作

    在github上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决 1.添加文件并提交命令 2.推送到git服务器命令 3.删除文件并提交命令 4.推送到git服务器 查看下git 是否存 ...

  5. Android里的Dalvik、ART、JIT、AOT有什么关系?

    JIT,Just-in-time,即时编译,边运行边编译: AOT,Ahead Of Time,提前编译,指运行前编译. 区别 这两种编译方式的主要区别在于是否在“运行时”进行编译 优劣JIT优点: ...

  6. SpringBoot学习<一>——快速搭建SpringBoot

    这是我的第一篇博客,博客记录我以后的学习,包括一些总结之类的东西,当然,这些记录是针对于与我个人而言的,可能有些地方会有不好的,或者出现错误,欢迎大家来指正(如果有人看的话)废话不多说.进入正题:Sp ...

  7. Jenkins配置Publish Over SSH讲解说明

    原创 Jenkins配置Publish Over SSH讲解说明 2018-08-22 11:59:30 M.Blog 阅读数 3764更多 分类专栏: Jenkins   版权声明:本文为博主原创文 ...

  8. Python学习日记(二十三) 类命名空间和组合

    类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...

  9. Android笔记(五十) Android中的JSON数据

    JSON是什么: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更容易理解 JSON语法: 数据在名称/值对中 数据由逗号分割 大括号表示对象 中括号表示数组 ...

  10. centos7 安装Virtualenv

    若想在同一个服务器上,存在多个不同的解析器版本,使用虚拟环境 1.安装虚拟环境 pip3 install virtualenv 2.创建虚拟环境 virtualenv --no-site-packag ...