1. 概述:
该demo主要实现linux下定时器的基本使用

2. 测试:

/*
timer_tip.h
POSIX 内置定时器*/
#include <time.h>
#include <signal.h>
#include <pthread.h>/******************************创建定时器*************************************/
int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid);
/*
clock_id : 检索和设置的clk_id指定的时钟时间CLOCK_REALTIME : 系统实时时间, 随系统实时时间改变而改变, 即从UTC1970-1-1 0:0:0开始计时, 中间时刻如果系统时间被用户改成其他, 则对应的时间相应改变CLOCK_MONOTONIC : 从系统启动这一刻起开始计时, 不受系统时间被用户改变的影响CLOCK_PROCESS_CPUTIME_ID : 本进程到当前代码系统CPU花费的时间CLOCK_THREAD_CPUTIME_ID : 本线程到当前代码系统CPU花费的时间CLOCK_REALTIME_HR : CLOCK_REALTIME的高精度版本CLOCK_MONOTONIC_HR : CLOCK_MONOTONIC的高精度版本
*/union sigval
{int sival_int;  //integer valuevoid *sival_ptr; //pointer value
}/*
sigev_notify : SIGEV_NONE : 定时器到期后什么都不做, 只提供通过timer_gettime和timer_getoverrun查询超时信息SIGEV_SIGNAL : 定时器到期后, 内核会将sigev_signo所指定的信号, 传送给进程, 在信号处理程序中, si_value会被设定为sigev_value的值SIGEV_THREAD : 定时器到期后, 内核会以sigev_notification_attributes为线程属性创建一个线程, 线程的入口地址为sigev_notify_function, 传入sigev_value作为一个参数
*/
struct sigevent
{int sigev_notify;   //设置定时器到期后的行为int sigev_signo;    //设置产生信号的信号码union sigval   sigev_value; //设置产生信号的值void (*sigev_notify_function)(union sigval);//定时器到期, 从该地址启动一个线程pthread_attr_t *sigev_notify_attributes;    //创建线程的属性
}/*************************启动/停止/重置定时器********************************/
int timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspect *ovalue);
/*
flags : 0 :value->it_value 表示希望timer首次到期时的时间与启动timer的时间间隔TIMER_ABSTIME :value->it_value 表示希望timer首次到期的绝对时间(如果value->it_value 设定的绝对时间早于当前的绝对时间, 那么timer会立即到期)
*/struct timespec
{time_t  tv_sec    //Secondslong    tv_nsec   //Nanoseconds
};/*
定时器工作时, 先将it_value的时间值减到0, 发送一个信号, 再将it_interval的值赋给it_value, 重新开始定时, 如此反复
*/
struct itimerspec
{struct timespec it_interval;    // 时间间隔struct timespec it_value;       // 首次到期时间
};/******************************销毁定时器*************************************/
int timer_delete (timer_t timerid);/**********************获取定时器的到期时间和间隔*****************************/
int timer_gettime(timer_t timerid, struct itimerspec *curr_value);/*************************获取定时器超限的次数********************************/
int timer_getoverrun(timer_t timerid);
/*
demo_timer.c
时间编程demo : 定时器相关编程*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <time.h>
#include <signal.h>
#include <pthread.h>void handle(union sigval v)
{pthread_detach(pthread_self());time_t t;char p[32] = {0};time(&t);strftime(p, sizeof(p), "%T", localtime(&t));printf("%s thread %lu, sival_int = %d signal captured.\n", p, pthread_self(), v.sival_int);return;
}int main(int argc, char **argv){int ret;timer_t timer;struct sigevent evp;memset (&evp, 0x0, sizeof (struct sigevent));evp.sigev_value.sival_ptr = &timer;evp.sigev_value.sival_int = 512;evp.sigev_notify = SIGEV_THREAD;evp.sigev_notify_function = handle;ret = timer_create(CLOCK_REALTIME, &evp, &timer);if(ret)perror("timer_create");struct itimerspec ts;memset (&ts, 0x0, sizeof (struct itimerspec));ts.it_value.tv_sec = 1;ts.it_value.tv_nsec = 0;ts.it_interval.tv_sec = 1;ts.it_interval.tv_nsec = 0;ret = timer_settime(timer, 0, &ts, NULL);if(ret)perror("timer_settime");sleep(5);ret = timer_delete(timer);if(ret)perror("timer_delete");sleep(5);return 0;
}
#Makefile
CC := gcc
INCLUDE = -I /home/demo/include/all:$(CC) demo_timer.c $(INCLUDE) -o demo_timer -lpthread -lrt -Wall -Werrorclean:rm demo_timer

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. stdthread(7)并发unique_lock灵活性
  2. PKI/CA (4)根CA信任模型“证书构建”
  3. 让PIP源使用国内镜像
  4. python文件writelines_python 写文件write(string), writelines(list)
  5. accept标头 php,解决PHP中缺少“授权”请求标头的问题
  6. 程序员会写诗是怎样的体验
  7. ListView setOnItemClickListener无法响应点击事件解决
  8. @RequestParam接收解析不到 POST 提交的 数据
  9. 【Angular 4】Can't bind to 'ngModel' since it isn't a known property of 'input'
  10. Thinkphp3.2邮件发送
  11. MUI框架开发HTML5手机APP
  12. 用Free Pascal IDE编写第一个程序Pascal版的hello world
  13. 什么是软件测试吞吐量,在软件测试中吞吐量与TPS有什么区别与联系
  14. 金刚石切割丝的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. push_back和emplace_back区别
  16. 从动物科学到乐队鼓手,腾讯技术小哥的开源人生
  17. java求矩阵的逆矩阵_Java逆矩阵计算
  18. 计算机表格快捷键,工具 | 20个超级实用的Excel快捷键,会用5个是高手!
  19. 烧脑难题:诡异的世界9大悖论
  20. Glide加载网络图片出现模糊问题

热门文章

  1. Hi3559A Hi3519A Hi3556A算力对比
  2. matlab结构数组增加域,如何用matlab创建结构数组
  3. 转《DB2操作指南及命令大全》
  4. 如何下载历史版本的App Store中的APP
  5. 新闻发布系统设计说明书
  6. win10+VS2017+DX11踩的那些雷
  7. 红米Note8手机图纸-电路原理图+主板元件位号图
  8. 循环冗余校验码(CRC)详解
  9. 鸿蒙系统底部任务栏无响应,win10底部任务栏无响应两种修复方法
  10. oso kabuwj severe conime 美女病毒 重要文件.exe : 通过移动设备引发的血案...