Linux 下可以使用 alarm 函数或 setitimer 函数设置一个定时器。alarm 的定时器是以 秒计时的,setitimer 的定时器可以精确到 微秒

一、alarm 定时器

alarm 可以在进程中设置一个定时器,当定时器指定的时间到时,它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程。

#include <unistd.h>unsigned int alarm(unsigned int seconds);

seconds:指定秒数
成功:如果调用此alarm() 前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0
失败:-1

示例

#include <stdio.h>
#include <unistd.h>
#include <signal.h>void sigHandFun(int signum)
{printf("3秒时间到...\n");
}int main(int argc, char const *argv[])
{if (SIG_ERR == signal(SIGALRM, sigHandFun)) {perror("signal");return -1;}alarm(3);printf("启动定时器,计时3秒...\n");pause(); //SIGALRM 信号处理函数返回后,pause 立即返回return 0;
}

二、setitimer 定时器

#include <sys/time.h>int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

which: 为定时器类型,setitimer支持3种类型的定时器:

  • ITIMER_REAL: 定时器值实时递减,发生的信号为 SIGALRM (常用)
  • ITIMER_VIRTUAL: 进程执行时递减定时器的值,发送的信号为 SIGVTALRM
  • ITIMER_PROF: 进程和系统执行时都递减定时器的值,发送的信号为 SIGPROF

new_value: 设置定时时长,和指定 多长时间后启动定时器
old_value:记录上一次的定时设置,不用 传NULL
成功返回 0,否则返回 -1

struct itimerval {struct timeval it_interval; /* 定时时长 */struct timeval it_value;    /* 启动时间 */
};struct timeval {time_t      tv_sec;         /* 秒 */suseconds_t tv_usec;        /* 微秒 */
};

示例:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>void sigHandFun(int signum)
{static int n = 0;n++;if (2000 == n) {printf("1秒时间到...\n");}
}int main(int argc, char const *argv[])
{struct itimerval itv;//信号处理if (SIG_ERR == signal(SIGALRM, sigHandFun)) {perror("signal");return -1;}//设置定时时长: 0.5msitv.it_interval.tv_sec  = 0;itv.it_interval.tv_usec = 500;//设置启动时间: 1秒后启动itv.it_value.tv_sec  = 1;itv.it_value.tv_usec = 0;//设置定时器if (-1 == setitimer(ITIMER_REAL, &itv, NULL)) {perror("setitimer");return -1;}while(1);   return 0;
}

Linux 定时器使用相关推荐

  1. linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc

    linux定时器和Jiffies汇 1.linux HZ Linux核心几个重要跟时间有关的名词或变数,将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer int ...

  2. 二十二、linux定时器

    一.Linux 定时器介绍 在 Linux 内核中, 定时器叫做内核定时器, 内核定时器用于控制某个函数, 也就是定时器将要处理的函数在未来的某个特定的时间内执行. 内核定时器注册的处理函数只执行一次 ...

  3. Linux定时器接口

    Linux定时器接口主要分为三类: 一. sleep(), unsleep, alarm(),引用了SIGALARM信号,在多线程中使用信号又是相当麻烦的. 二. nanosleep(), clock ...

  4. Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)

    Linux定时器:无节拍机制tickless(CONFIG_NO_HZ) BAT-Battle 2013-09-01 Tickless 机制是Linux 内核中引入的新定时机制 以前,Linux内核会 ...

  5. Linux定时器执行

    Linux定时器执行 Linux系统的定时器执行命令:crontab 1.参数选项: -e:编辑定时执行内容 -l:显示当前定时执行内容 -r:删除当前定时执行内容 -i:在删除用户的crontab之 ...

  6. linux定时器(crontab)实例

    linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...

  7. Linux定时器使用

    cron 定时器是一个可以按照计划自动运行命令的工具.定时器作业称为 cronjob,创建于 crontab 文件中.这是用户自动操作电脑的最简单也是最古老的方法. 创建一个 cronjob 要创建一 ...

  8. linux定时器回调处理过程,Linux内核系统定时器TIMER实现过程分析

    可见涉及到系统定时器的数据结构并不多,那么:对于一个linux系统中,定时器个数可能会很多,而且每个定时器的超时事件时间并不相同,所以如何管理和处理定时器超时事件,关系到内核性能的高低.它根据不同的定 ...

  9. linux 定时器_定时器: Nodejs 中的 timers

    在看 Node http 模块文档的时候, 才留意到 server.timeout 这个属性, 本想简单介绍一下, 但是在梳理过后发现关于 timeout 有庞大的内容支撑: server.timou ...

  10. linux定时器错误使用,linux下定时器的使用

    Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...

最新文章

  1. 《LeetCode力扣练习》第7题 C语言版 (做出来就行,别问我效率。。。。)
  2. 用上强化学习和博弈论,EA开发的测试AI成精了
  3. iOS开发之加载大量网络图片优化
  4. 使用Dockerfile创建一个tomcat镜像
  5. oracle 11g r2配置文件,Oracle 11g R2 常用配置与日志的文件位置
  6. 减负提质的新命题下,网易云信如何为课后服务升级?
  7. 02.生成、打包、部署和管理应用程序及类型
  8. Linux的追逐,Windows的穷途恼指日可待
  9. MongoDB 计划从“Data Sprawl”中逃脱
  10. 8 行代码用Python画一个中国地图
  11. 贪心算法三个经典例题
  12. 组态软件mcgs入库mysql_MCGS组态软件实现数据报表
  13. 通过使用 NTLite 工具实现精简Windows系统
  14. ubuntu20.04安装qq音乐并解决闪退问题
  15. jQuery倒计时插件
  16. 如何将一个mp3文件平均分割成三个?
  17. 《认知心理学》思维导图
  18. blowfish java_java如何实现blowfish算法
  19. app支付宝验证登录
  20. 欧拉角,轴角,四元数与旋转矩阵详解

热门文章

  1. VS2017 插件的安装目录
  2. CSDN超实用的浏览器插件—去自家网站搜索广告、超快捷万能搜索、各种实用小功能等诸多功能等你探索
  3. pycharm隐藏窗口
  4. android刷机教程基础篇
  5. 计算机iis配置具体步骤,IIS配置运行ASP网站配置与注意事项
  6. C语言函数嵌套学习实例
  7. 遗传算法及其应用_遗传算法及其广泛应用
  8. 华为管理学案例分析_华为案例分析——管理学作业.ppt
  9. C++入侵电脑远程控制,体验一把做黑客的感觉!
  10. 软媒魔方 6.0.5 正式绿色版