linux内部的alarm是通过设定参数long sec的指进行设定内核态的时间 每次相隔当前系统时间的下一次的时间到达之后内部的计数器会进行加一 然后返回SIGALRM 信号 一般我们所用的是linux的setitimer和getitimer 因为这种方式的时间选择多样性有三种模式ITIMER_REAL ITIMER_PROF ITIMER_VIRTUAL 三种模式 第一种是反馈系统得真实时间 是递减的返回SIGALRM 第二种是反馈用户态和内核态的综合时间返回SIGPROFR 第三种是内核态的时间返回SIGVTALRM 上述三种mode全部用在第一个参数 int which让用户层获取三种类型的时间点 不过这三种模式一般不分彼此 全部都通用
#include <sys/time.h>
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
#include <signal.h>
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
int main(void)
{
struct itimerval setvalue;
setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_REAL,&setvalue,NULL);

setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_VIRTUAL,&setvalue,NULL);setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=1;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_PROF,&setvalue,NULL);while(1)
{struct itimerval value;getitimer(ITIMER_REAL,&value);printf("ITIMER_REAL: internal:%ds%dms,remain:%ds%dms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);getitimer(ITIMER_VIRTUAL,&value);printf("ITIMER_VIRTUAL:internal:%ds%dms,remain:%ds%dms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);getitimer(ITIMER_PROF,&value);printf("ITIMER_PROF: internal:%ds%dms,remain:%ds%dms\n\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);sleep(1);
}

}

返回的测试值
ITIMER_REAL: internal:3s0ms,remain:2s999991ms
ITIMER_VIRTUAL:internal:3s0ms,remain:3s4000ms
ITIMER_PROF: internal:3s0ms,remain:1s4000ms

ITIMER_REAL: internal:3s0ms,remain:1s997866ms
ITIMER_VIRTUAL:internal:3s0ms,remain:3s4000ms
ITIMER_PROF: internal:3s0ms,remain:1s4000ms

ITIMER_REAL: internal:3s0ms,remain:0s996840ms
ITIMER_VIRTUAL:internal:3s0ms,remain:3s4000ms
ITIMER_PROF: internal:3s0ms,remain:1s4000ms

linux闹钟alarm相关推荐

  1. linux之alarm函数

    1. alarm函数 [cpp] view plain copy [1] 引用头文件:#include <unistd.h>; [2] 函数标准式:unsigned int alarm(u ...

  2. linux闹钟函数用法(alarm)

    alarm(闹钟函数),当定时器指定的时间到时,它向进程发送SIGALRM信号.可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程. 在调用前需要写处理函数myAla ...

  3. linux sleep alarm,Linux环境编程之信号处理(三、利用alarm()和pause()函数实现sleep()函数)...

    sleep()是执行挂起一段时间,而alarm()函数是定时器,pause()函数则是挂起进程,当出现信号打断时,才会继续往前执行: 先来分享下alarm()函数,alarm()函数用来设置一个定时器 ...

  4. Linux C alarm的使用

    alarm函数的原型是:unsigned int alarm(unsigned int seconds) 头文件:#include <unistd.h> 参数:秒数 返回值:当前进程中上一 ...

  5. linux c alarm系统调用入门

    alarm就是给系统发一个请求,多久之后发送一个alarm信号给我. #include <stdint.h> #include <stdlib.h> #include < ...

  6. linux内核alarm,linux C之alarm函数

    alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程.如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回.要注意 ...

  7. linux alarm定时器,Linux 定时器alarm()(转)

    系统中的每个进程都有一个私有的闹钟.这个闹钟很像一个计时器,可以设置在一定秒数后闹钟.时间一到,时钟就发送一个信号SIGALRM到进程. 函数原型:unsigned int alarm(unsigne ...

  8. linux内核alarm,linux中alarm函数的实例讲解

    linux alarm函数简介 上代码: #include #include #include #include int main(int argc, char *argv[]) { alarm(5) ...

  9. Linux定时器alarm()用法讲解

    运行程序,分析程序执行结果. #include<unistd.h> #include<signal.h> #include<stdio.h> void handle ...

最新文章

  1. 这 HTTPS,真滴牛逼!
  2. 面试鹅厂,我三面被虐的体无完肤。。。
  3. Shell脚本读取Redis键值对
  4. 单片机小白学步系列(十四) 点亮第一个LED的程序分析
  5. java对象不会被改变_Java 并发编程(二)对象的不变性和安全的公布对象
  6. IsPostBack须要注意的地方,这些都不是POSTBACK动作
  7. 可视化排班管理_小白经理的思考日记-可视化看板和走动管理
  8. Android中关于Volley的使用(三)认识Volley的架构
  9. java 经纬度 地图_基于JAVA的地图经纬度坐标查询api调用代码实例
  10. LOL聊天服务器一直是断开状态怎么办,lol聊天服务器为什么老连不上 lol聊天服务器连不上解决技巧...
  11. windows7系统之家旗舰版下载
  12. embarrass的用法和搭配_comfortable的用法和搭配
  13. js常用插件(三)之html2canvas生成海报
  14. p2p sdk接收文件服务端epoll模型源码
  15. Couldn‘t flush user prefs: java.util.prefs.BackingStoreException: Couldn‘t get file lock
  16. 《未来已来- 马云》笔记
  17. 【pytorch】tensor和Tenso区别
  18. mysql服务攻击检测_3款SQL INJECTION攻击检测工具_MySQL
  19. 【爬虫】Scrapy爬取古风漫画网
  20. 【2023 阿里云云计算工程师 ACP 认证练习题库】01、VPC 专有网络题库

热门文章

  1. 双评价技术指南2020_双评价技术学习笔记(旧)
  2. Visual Studio2019完全卸载方法
  3. MoveIt的使用(二)机械臂URDF在ROS中MoveIt的配置和使用
  4. 百度率先在元宇宙举办大会,李彦宏:中国迎来AI黄金十年
  5. 计算机知识培训感言,关于计算机培训心得体会
  6. Java实现权限管理的两种方式
  7. TongWeb及应用系统安全加固
  8. 大数据量、高并发量网站解决方案
  9. Oracle怎么统计clob的行数,Oracle CLOB性能
  10. Could You Be A Target For Layoffs?