Linux 定时器使用
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 定时器使用相关推荐
- linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc
linux定时器和Jiffies汇 1.linux HZ Linux核心几个重要跟时间有关的名词或变数,将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer int ...
- 二十二、linux定时器
一.Linux 定时器介绍 在 Linux 内核中, 定时器叫做内核定时器, 内核定时器用于控制某个函数, 也就是定时器将要处理的函数在未来的某个特定的时间内执行. 内核定时器注册的处理函数只执行一次 ...
- Linux定时器接口
Linux定时器接口主要分为三类: 一. sleep(), unsleep, alarm(),引用了SIGALARM信号,在多线程中使用信号又是相当麻烦的. 二. nanosleep(), clock ...
- Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)
Linux定时器:无节拍机制tickless(CONFIG_NO_HZ) BAT-Battle 2013-09-01 Tickless 机制是Linux 内核中引入的新定时机制 以前,Linux内核会 ...
- Linux定时器执行
Linux定时器执行 Linux系统的定时器执行命令:crontab 1.参数选项: -e:编辑定时执行内容 -l:显示当前定时执行内容 -r:删除当前定时执行内容 -i:在删除用户的crontab之 ...
- linux定时器(crontab)实例
linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...
- Linux定时器使用
cron 定时器是一个可以按照计划自动运行命令的工具.定时器作业称为 cronjob,创建于 crontab 文件中.这是用户自动操作电脑的最简单也是最古老的方法. 创建一个 cronjob 要创建一 ...
- linux定时器回调处理过程,Linux内核系统定时器TIMER实现过程分析
可见涉及到系统定时器的数据结构并不多,那么:对于一个linux系统中,定时器个数可能会很多,而且每个定时器的超时事件时间并不相同,所以如何管理和处理定时器超时事件,关系到内核性能的高低.它根据不同的定 ...
- linux 定时器_定时器: Nodejs 中的 timers
在看 Node http 模块文档的时候, 才留意到 server.timeout 这个属性, 本想简单介绍一下, 但是在梳理过后发现关于 timeout 有庞大的内容支撑: server.timou ...
- linux定时器错误使用,linux下定时器的使用
Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...
最新文章
- 《LeetCode力扣练习》第7题 C语言版 (做出来就行,别问我效率。。。。)
- 用上强化学习和博弈论,EA开发的测试AI成精了
- iOS开发之加载大量网络图片优化
- 使用Dockerfile创建一个tomcat镜像
- oracle 11g r2配置文件,Oracle 11g R2 常用配置与日志的文件位置
- 减负提质的新命题下,网易云信如何为课后服务升级?
- 02.生成、打包、部署和管理应用程序及类型
- Linux的追逐,Windows的穷途恼指日可待
- MongoDB 计划从“Data Sprawl”中逃脱
- 8 行代码用Python画一个中国地图
- 贪心算法三个经典例题
- 组态软件mcgs入库mysql_MCGS组态软件实现数据报表
- 通过使用 NTLite 工具实现精简Windows系统
- ubuntu20.04安装qq音乐并解决闪退问题
- jQuery倒计时插件
- 如何将一个mp3文件平均分割成三个?
- 《认知心理学》思维导图
- blowfish java_java如何实现blowfish算法
- app支付宝验证登录
- 欧拉角,轴角,四元数与旋转矩阵详解