和alarm函数类似,都用于定时操作;

函数原型:int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

参数:which是指定的定时方式

①自然定时:ITIMER_REAL → 14)SIGLARM                                                 计算自然时间

② 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM     只计算进程占用cpu的时间

③ 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF          计算占用cpu及执行系统调用的时间

new_value被const限定,这是一个传入参数;old_value没有const,这是一个传出参数。结构体itimerval是这样的:

struct
itimerval {

    struct
timeval it_interval; /* Interval for periodic timer */

    struct
timeval it_value; /* Time until next expiration */

};

结构体timeval是这样的:

struct timeval {

    time_t tv_sec; /* seconds */

    suseconds_t tv_usec; /* microseconds */

};

为了更好的理解,我写了下面的代码:

#include
<stdlib.h>

#include
<stdio.h>

#include
<sys/time.h>

#include
<signal.h>

void mafunc(int
signo)

{

    puts("hello, world.");

}

int main(void)

{

    struct
itimerval it, oldit;

    signal(SIGALRM, myfunc);//信号捕捉函数,不执行SIGALRM信号的默认动作

    it.it_value.tv_sec = 5;//秒

    it.it_value.tv_usec = 0;//微秒

    it.it_interval.tv_sec = 3;

    it.it_interval.tv_usec = 0;

    if (setitimer(ITIMER_REAL, &it, &oldit) == -1)

    {

        perror("setitimer error ");

        exit(1);

    }

    while (1);

    return 0;

}

执行之后,间隔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()函数

    定时器时间函数 struct itimerval: struct itimerval *new_value,其定义如下: struct itimerval { struct timeval it_in ...

  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. Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的

    Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的.? https://www.zhihu.com/question/46399868 服move free还要补钙 ...

  2. zabbix 3.4新功能值解析——Preprocessing预处理

    Zabbix 3.4版本更新了许多新功能,其中一个监控项功能Preprocessing,根据官方说明文档,在监控项收集的数据存储到数据库前,预先对数据进行处理,使用效果超过预期.这个功能存放位置在创建 ...

  3. CRM 2016 IFrame 函数修改 父页面字段

    IFrame js 代码: parent.Xrm.Page.getAttribute("new_xxxx").setValue(123); 当然,可以设置 new_xxxx 字段的 ...

  4. Android重打包+重新签名工具Apktool Box

    可实现apk反编译+重新打包+重新签名,界面如下 : 部分引用自开源代码:http://github.com/Bu4275/AutoAPKTool

  5. delphi正则表达式学习笔记(一)

    在 Delphi 中是没有自带的正则表达式库的,在网上能找到的用于 Delphi 的正则表达式类大体上有两个,分别是 PerlRegEx 和 RegExpr. 前者相当强大,但发布程序时需要带上他的一 ...

  6. flask框架get post方式

    设置路由的访问方式get post常用的两种 # -*- coding: utf-8 -*- # Flask hello world from flask import Flask, redirect ...

  7. python if all

    #encoding:utf-8 s=['1','9']sta='56789'# if all(t not in sta for t in s):#     print staif all(t not ...

  8. 启动tomcat时cmd窗口一闪而过

    在tomcat的安装目录下 双击startup.bat启动时cmd窗口一闪而过 1.在系统中查看配置JDK的环境变量是否正确 2.进入tomcat的安装目录 在启动tomcat时流程是:startup ...

  9. linux常用命令以及快捷键

    find命令查找某些文件并将其拷贝到指定目录 [root@host lib]# find -name "*hbase*.jar" |xargs -i cp {}  /root/aa ...

  10. php多图片上传。

    1. <form method="post" enctype="multipart/form-data" action='请求地址' > <i ...