10.5.2 通晓定时器设置

函数alarm设置的定时器只能准确到秒,而以下函数理论上能够准确到精深:

#include

#include

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

int setitimer(int which, const struct itimerval

*value, struct itimerval *ovalue);

函数setitimer能够供给三种定时器,它们互相自力更生,任意一个定时告终都将发送定时信号到历程,并且积极重新计时。参数which确定了定时器的种类,如表10-6所示:

表10-6 参数which与定时器种类

取值

含义

信号发送

ITIMER_REAL

定时恳挚工夫,与alarm种类雷同。

SIGALRM

ITIMER_VIRT

定时历程在用户态下的切实厉行工夫。

SIGVTALRM

ITIMER_PROF

定时历程在用户态和中心态下

的切实厉行工夫。

SIGPROF

这三种定时器定时告终时给历程发送的信号各不雷同,其中ITIMER_REAL类定时器发送SIGALRM信号,ITIMER_VIRT类定时器发送SIGVTALRM信号,ITIMER_REAL类定时器发送SIGPROF信号。

函数alarm性质上设置的是低准确、非重载的ITIMER_REAL类定时器,它只能准确到秒,并且每次设置只能发生顺次定时。函数setitimer设置的定时器则不同,它们不但能够计时到精深(理论上),还能积极循环定时。在一个Unix历程中,不能同时利用alarm和ITIMER_REAL类定时器。

构造itimerval描写了定时器的构成:

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

}

构造timeval描写了一个准确到精深的工夫:

struct timeval

{

long tv_sec;

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秒即可:

struct itimerval 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告终过程,如代码10-11所示:

代码10-11 正确定时器实例(节自/code/chapter10/time4.c)

#include

#include

#include

#include

#include

int n = 0;

void timefunc(int sig)

{

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

signal(SIGPROF, timefunc);

}

void main()

{

struct itimerval value;

value.it_value.tv_sec=1;

value.it_value.tv_usec=500000;

value.it_interval.tv_sec=1;

value.it_interval.tv_usec=500000;

signal(SIGPROF, timefunc);

setitimer(ITIMER_PROF, &value, NULL);

while (1);

}

编译和运行代码10-11:

# make time4

cc -O -o time4 time4.c

# ./time4

ITIMER_PROF[0]

ITIMER_PROF[1]

ITIMER_PROF[2]

ITIMER_PROF[3]

linux下设置定时器,linux定时器设置.相关推荐

  1. linux数据库实例开机启动,linux下数据库实例开机自启动设置

    linux下数据库实例开机自启动设置 1.修改/oratab [root@org54 ~]# vi/etc/oratab --把N改为Y,如下提示 # This file is used by ORA ...

  2. 织梦linux php版本,Linux下安装DedeCMS及安全设置

    Linux下安装DedeCMS及安全设置 织梦无忧 2018-12-09 20:40 摘要: 随着Linux服务器应用范围越来越广泛,国内很多站长也开始使用它作为自己的Web服务器,本篇就来介绍如何在 ...

  3. Linux下的微秒级定时器: usleep, nanosleep, select, pselect

    Linux下的微秒级定时器: usleep, nanosleep, select, pselect 标签: linuxnulldelaystructdate 2012-02-07 23:29 4979 ...

  4. Linux下网络服务的安全设置

    Linux下网络服务的安全设置 Linux操作系统由于其良好的稳定性.健壮性.高效性和安全性.正在成为各种网络服务的理想平台.各种网络应用在Linux系统上部有性能卓越的应用,例如,提供Web服务的A ...

  5. linux nginx安装php5.5,linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装

    linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装: 首先安装依赖包: yum -y install gcc gcc-c++ autoconf libjp ...

  6. lnmp php 5.4,linux下搭建LNMP(linux+nginx+mysql+php)环境之php5.4安装

    安装准备:依赖包下载wget http://ah1.down.chinaz.com/201303/PHP-v5.4.13.tar.gz wget http://soft.7dot.com/soft/l ...

  7. Linux下netstat常用,Linux netstat常用命令

    1.统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2.统计httpd协议连接数(查看Apache的并发请求数及其TCP连接状态) ps -ef ...

  8. linux下oracle开机自启动,Linux下开机自动启动Oracle的设置

    让我手动启动数据库,我决定花点时间研究下Oracle随Linux自动重启的设置,具体方法如下: 因为办公室突然停电,服务器重启后,数据库并没有跟着重启,,我才发现原来所有的数据库都没有设置开机自动重启 ...

  9. Linux下静态IP地址的设置及TFTP服务的搭建

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务 ...

  10. linux静态网络ip dns怎么设置,Linux下如何配置静态IP设置DNS和主机名?

    配置文件位于: /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192 ...

最新文章

  1. 在进行正式托管之前,服务器托管用户需要做哪些准备?
  2. poj 1716(贪心)
  3. 人工智能AI实战100讲(二十)-先拍照后对焦,基于深度估计的景深编辑与背景虚化
  4. 认识死锁之死锁的基本概念
  5. Android利用Thread或AsyncTask进行非UI操作
  6. VSCode:vscode设置侧边资源管理器文字大小
  7. eeprom和编程器固件 k2_斐讯K1K2新版固件v22.4.xx.xx简单刷机教程
  8. Linux CentOS 7 Apache Tomcat 7 安装与配置
  9. Matlab实现和使用神经网络的几种方式详细讲解--附代码可下载
  10. Pascal 转 C++ 教程1
  11. AutoCAD2007专业版
  12. C++ 排列组合问题
  13. 解决word各级标题序号后面有长空格
  14. Windows 回声消除 怎么外放音乐不让对方听到
  15. HR website
  16. Ubuntu 分区挂载后无权限
  17. js版ffmpeg压缩视频以及去除背景音乐
  18. ORACLE安装方法
  19. 迟到的年终总结,2012-2014
  20. 防止用户重复登录解决方案

热门文章

  1. 分享一个通过项目管理师证书成功办理北京户口的励志经验
  2. 机器学习基础(二)——训练集和测试集的划分
  3. 卫星电视的双本振,单本振及高频头相关知识普及
  4. RTL8153B ,瑞昱千兆网卡芯片 ,扩展坞HUB千兆网口芯片。
  5. 利用二维向量的叉乘判断凹凸多边形
  6. 基于LM331的频率电压转换电路
  7. 【单片机】2.5 AT89S52的并行I/O端口
  8. 哔哩哔哩助手:玩转B站、全速下载、夜间模式、画中画 等功能
  9. 简易论坛代码源码(php+css+js+mysql)完整的代码源码,系统使用B/S架构
  10. C语言实现平衡二叉树