Linux 定时器设置

函数alarm设置的定时器只能精确到秒,而以下函数理论上可以精确到微妙:

#include <sys/select.h>

#include <sys/time.h>

int getitimer(int which, struct itimerval*value);

int setitimer(int which, const structitimerval *value, struct itimerval *ovalue);

函数setitimer可以提供三种定时器,它们相互独立,任意一个定时完成都将发送定时信号到进程,并且自动重新计时。参数which确定了定时器的类型,信号发送ITIMER_REAL 定时真实时间,与alarm类型相同。 SIGALRM ITIMER_VIRT 定时进程在用户态下的实际执行时间。SIGVTALRMITIMER_PROF 定时进程在用户态和核心态下的实际执行时间。 SIGPROF 这三种定时器定时完成时给进程发送的信号各不相同,其中ITIMER_REAL类定时器发送SIGALRM信号,ITIMER_VIRT类定时器发送SIGVTALRM信号,ITIMER_REAL类定时器发送SIGPROF信号。

函数alarm本质上设置的是低精确、非重载的ITIMER_REAL类定时器,它只能精确到秒,并且每次设置只能产生一次定时。函数setitimer设置的定时器则不同,它们不但可以计时到微妙(理论上),还能自动循环定时。

在一个Unix进程中,不能同时使用alarm和ITIMER_REAL类定时器。

结构itimerval描述了定时器的组成:

struct itimerval {   

struct tim. it_interval;    /* 下次定时取值 */   

struct tim. it_value;       /* 本次定时设置值 */

}   

结构tim.描述了一个精确到微妙的时间:

struct tim. {   

long   tv_sec;                 /* 秒(1000000微秒) */   

long   tv_usec;                 /* 微妙 */

}

函数setitimer设置一个定时器,参数value指向一个itimerval结构,该结构决定了设置的定时器信息,结构成员it_value指定首次定时的时间,结构成员it_interval指定下次定时的时间。定时器工作时,先将it_value的时间值减到0,发送一个信号,再将it_value赋值为it_interval的值,重新开始定时,如此反复。如果it_value值被设置为0,则定时器停止定时;如果it_value值不为0但it_interval值为0,则定时器在一次定时后终止。函数setitimer调用成功时返回0,否则返回-1,参数ovalue如果不为空,返回上次的定时器状态。函数getitimer获取当前的定时器状态,整型参数which指定了读取的定时器类型,参数value返回定时器状态。函数调用成功返回0,否则返回-1。

 

 

例1.           设置一个定时器,每2.5秒产生一个SIGALRM信号。

答:将itimerval结构的成员it_interval和成员it_value均赋值为2.5秒即可:

Struct itimerval value;

value.it_value.tv_sec=2;

value.it_value.tv_usec=500000;

value.it_interval.tv_sec=2;

value.it_interval.tv_usec=500000;

setitimer(ITIMER_REAL, &value, NULL);

函数setitimer设置的定时器可以重复定时,无需多次调用。

例2.           设置一个定时器,进程在用户态下执行1秒钟后发出首次信号,以后进程每在用户态下执行3秒钟,发送一个信号。

答:将itimerval结构的成员it_value均赋值为1秒,成员it_interval赋值为3秒即可:structitimerval value;

value.it_value.tv_sec=1;

value.it_value.tv_usec=0;

value.it_interval.tv_sec=3;

value.it_interval.tv_usec=0;

setitimer(ITIMER_VIRT, &value, NULL);

例3.           取消一个ITIMER_PROF类定时器。

答:将itimerval结构的成员it_value均赋值为0秒即可:

struct itimerval value;

value.it_value.tv_sec=1;

value.it_value.tv_usec=0;

setitimer(ITIMER_PROF, &value, NULL);

例4.           设置一个定时1.5秒的真实时间定时器,它仅发送一次信号就自动取消。

答:将itimerval结构的成员it_value均赋值为1.5秒,成员it_interval赋值为0秒即可:struct itimerval value;

value.it_value.tv_sec=1;

value.it_value.tv_usec=500000;

value.it_interval.tv_sec=0;

value.it_interval.tv_usec=0;

setitimer(ITIMER_REAL, &value, NULL);

 

精确定时器实例

本处设计了一个精确定时器的例子,进程每隔1.5秒数发送定时信号SIGPROF,在接收到信号时将打印定时的次数,用户可以键入CTRL_C或DELETE结束程序

 

#include <sys/select.h>

#include <sys/time.h>

#include <stdio.h>

#include <unistd.h>

#include <signal.h>

int n = 0;

void timefunc(int sig)                      /* 定时事件代码 */

{   

fprintf(stderr,"ITIMER_PROF[%d]\n", n++);

}

void main()

{   

struct itimervalvalue;   

value.it_value.tv_sec=1;                /* 定时1.5秒 */   

value.it_value.tv_usec=500000;   

value.it_interval.tv_sec=1;             /* 定时1.5秒 */    value.it_interval.tv_usec=500000;   

signal(SIGALRM,timefunc);         /* 捕获定时信号 */   

setitimer(ITIMER_REAL,&value, NULL);   /* 定时开始 */   

while (1);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea lombok不生效_Spring Boot 集成 Lombok 让代码更简洁!

点击上方“Java之间”&#xff0c;选择“置顶或者星标”你关注的就是我关心的&#xff01;作者&#xff1a;Anoyi lombok的威力简化代码IntelliJ IDEA安装lombok插件1、菜单栏 File > Settings > Plugins > Browse repositories…安装插件2、搜索 Lombok Plugin 安装后…

IT人转型做技术型销售到底行不行

想想自己已经做了八年的销售了&#xff0c;说不上很成功自己也算满意&#xff0c;多多少少有一些相关的经验。如果有刚刚入行或者即将入行的朋友愿意从一个过来人的视角着手去对这个行当多一些了解&#xff0c;我乐于慢慢码字出来与大家分享。 对很多职业来说&#xff0c;足够的…

arcgis按属性设置符号大小

一般都在高级设置里&#xff0c;以下是两个示例 1.相同颜色&#xff0c;不同大小 2不同颜色&#xff0c;不同大小

3648

/* 2SAT,找出一组解 逆缩图序&#xff0c;拓扑排序&#xff0c;然后染色。 找出和新娘颜色相同的点 */// include file #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <ctime>#i…

druiddatasource配置_Spring核心配置文件详解

点击蓝字“程序员考拉”欢迎关注&#xff01;1&#xff1a;spring的核心配置文件中的各种配置。 spring的核心配置文件的名字 叫做 applicationContext.xml&#xff0c;后期也可以通过配置文件中的配置修改名称&#xff0c;在web.xml中进行如下配置&#xff1a;<contex…

Linux两种定时器

Linux下的定时器有两种&#xff0c;以下分别介绍&#xff1a;     1、alarm     如果不要求很精确的话&#xff0c;用alarm&#xff08;&#xff09;和signal&#xff08;&#xff09;就够了     unsigned int alarm&#xff08;unsigned int seconds&#xff09;   …

origin(1)

origin窗口结构与布局 工作表 0.数据导入 0.1直接拖拽 0.2导入 配置相关参数 1.添加新列 1.1方法一 1.2方法二 2.设置x&#xff0c;y&#xff0c;z 2.1设置单列 2.2设置多列 2.3设置无关列 2.4设置误差线 2.5设置为标签 3.长短名称设置 3.1长名称设置 3.1.1方法一 3.1.2方…

Access 时间比较错误

原因 selete * from tab1 where addate>2010-12-24 14:07:44 拼接的时候改成 datetime dt datetime.now(); string sql "selete * from tab1 where addate>#"dt"#"; 把号换成#好就好了&#xff01;&#xff01;&#xff01;&#xff01;转载于:https…

神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<散点图>python)

散点图&#xff08;Scatter&#xff09;&#xff1a; 是数据点在直角坐标系中的分布图 scatter() 函数 marker参数——数据点样式 添加文字——text() 函数 坐标轴设置 增加图例 绘制标准正态分布的散点图步骤 #散点图&#xff08;Scatter&#xff09;&#xff1a;是数据点在直…

十字路口红绿灯plc程序_实例讲解红绿灯PLC程序设计方法

十字路口的交通指挥信号灯布置如下图&#xff1a;一、控制要求&#xff08;1&#xff09;信号灯系统由一个启动开关控制&#xff0c;当启动开关接通时&#xff0c;该信号灯系 统开始工作&#xff0c;当启动开关关断时&#xff0c;所有信号灯都熄灭。&#xff08;2&#xff09;南…

listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果

题记—— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精。Flutter是谷歌推出的最新的移动开发框架。本实例运行效果如下 &#xff1a;//启动函数void main() { runApp(RootApp());}//根目录class RootApp extends StatelessWidget { ov…

神经网络与深度学习——TensorFlow2.0实战(笔记)(六)(Matplotlib绘图基础<折线图和柱状图>python)

折线图&#xff08;Line Chart&#xff09;&#xff1a; 散点图的基础上&#xff0c;将相邻的点用线段相连接 plot()函数 #折线图&#xff1a;在散点图的基础上将相邻两个点链接 #描述变量变化的趋势 #plot(x,y,color,marker,label,linewidth,markersize) #x数据点的x坐标 #y…

WinCE6.0的EBOOT概要

为一个新的硬件设备定制WinCE6.0操作系统&#xff0c;一般需要完成以下几个主要步骤&#xff1a; 1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP)&#xff0c;BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。…

Silverlight HTML5 Flash - RIA技术之三足鼎立

未来&#xff0c;“用户体验”将成为所有软件商业价值的首要衡量标准。拥有极好用户体验的RIA(富互联网应用)技术近些年来发展迅猛&#xff0c;其中以Silverlight、HTML5及Flash最受热捧。纵观&#xff0c;互联网上98%的计算机都有安装Flash&#xff1b;HTML5的新特性则强化了W…

将经纬度转换为以度为单位的xy坐标

(LEFT(A2,FIND("",A2)-1))MID(A2,FIND("",A2)1,FIND("′",A2)-FIND("",A2)-1)/60MID(A2,FIND("′",A2)1,FIND("″",A2)-FIND("′",A2)-1)/3600 (LEFT(B2,FIND("",B2)-1))MID(B2,FIND("&…

python i开发工具_Python轻量级开发工具Genay使用

Genay是一个轻量级的免费&#xff0c;开放源代码的开发工具&#xff0c;支持很多的文件类型&#xff0c;并且支持很多的插件&#xff0c;启动快速。安装包只有十几兆&#xff0c;相比pycharm专业版需要收费&#xff0c;并且社区版的安装包大小有两百多兆&#xff0c;对于python…

wince 常见问题 1

1 在mediaplayer全屏播放的时候&#xff0c;我可以用键盘上的某一个键调节声音大小&#xff0c;现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多&#xff0c; 当声音变小的时候就减少 得到播放窗口的DC&#xff0c;然后在上面显示…

高服从编纂器 VIM-操作篇(1)

Toy Posted in Featured Post, Text Editor, Tutorials固然从好久前就开始用 VIM 了&#xff0c;但不绝都是半调吊子&#xff0c;翻来覆去只用自身会的饬令。最近为了提高誊写代码的服从&#xff0c;另有 coding 时分的兴味&#xff0c;又从新研讨了一下 VIM&#xff0c;发明白…

S3C2440 WINCE6将USB DEVICE改成USB HOST,实现两个USB HOST

S3C2440一般默认的是一个USB DEVICE&#xff0c;一个USB HOST&#xff0c;即一个主口&#xff0c;一个从口&#xff0c;先来看看USB Device与USB Host相关知识。 USB Host&#xff1a; 最底层就是USB Host控制器了&#xff0c;上层是USB Host Controller Driver&#xff0c;该…