和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. BGP属性+13条选路原则(转载)

    原文:http://blog.sina.com.cn/s/blog_be409c2f0102x6sg.html BGP(Border Gateway Protocol)边界网关协议 BGP(Borde ...

  2. [UE4]正交

    一.如果两条直线是垂直的,那么就可以说这2条直线是正交的.既然有垂直,为什么还要有正交概念呢? 因为正交可以描述两个或者多个变量之间互不影响.互不干涉,而垂直是完全属于几何的术语. 二.具有正交关系的 ...

  3. 如何优雅地等待所有的goroutine退出

    转自:https://www.cnblogs.com/cobbliu/p/4461866.html goroutine和channel是Go语言非常棒的特色,它们提供了一种非常轻便易用的并发能力.但是 ...

  4. Shell IF条件判断解析

    IF条件判断 1.基本语法: if [ command ]; then #符合该条件执行的语句 fi2.扩展语法: if [ command ];then #符合该条件执行的语句 elif [ com ...

  5. 第5章 IP地址和子网划分(3)_子网划分

    6.子网划分 6.1 地址浪费 (1)IPv4公网地址资源日益紧张,为减少浪费,使IP地址能够充分利用,就要用到子网划分技术. (2)传统上一个C类地址,如212.2.3.0/24,其可用的地址范围为 ...

  6. OOP学习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 《Linux 性能及调优指南》1.6 了解Linux性能指标

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  8. datagrid行内编辑时为datetimebox

    $.extend($.fn.datagrid.defaults.editors, { datetimebox: {// datetimebox就是你要自定义editor的名称 init: functi ...

  9. WPF GridLinesVisibility属性

    GridLinesVisibility:网格线可见性样式,其值有四种:All,Horizontal,None,Vertical.对应:全部,水平,没有,垂直 <!--#region 表格--&g ...

  10. vue2.0 父子组件数据传递prop

    vue的一个核心概念就是组件,而组件实例的作用域是孤立的,所以组件之间是不能直接引用其他组件的数据的.极端点举例来说,就是可以在同一个项目中,每一个组件内都可以定义相同名称的数据. data () { ...