直接上程序

程序1:采用新线程派驻的通知方式

#include

#include

#include

#include

#include

#include

#define CLOCKID CLOCK_REALTIME

void timer_thread(union sigval v)

{

printf("timer_thread function! %d\n", v.sival_int);

}

int main()

{

// XXX int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid);

// clockid--值:CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_ID

// evp--存放环境值的地址,结构成员说明了定时器到期的通知方式和处理方式等

// timerid--定时器标识符

timer_t timerid;

struct sigevent evp;

memset(&evp, 0, sizeof(struct sigevent));//清零初始化

evp.sigev_value.sival_int = 111;//也是标识定时器的,这和timerid有什么区别?回调函数可以获得

evp.sigev_notify = SIGEV_THREAD;//线程通知的方式,派驻新线程

evp.sigev_notify_function = timer_thread;//线程函数地址

if (timer_create(CLOCKID, &evp, &timerid) == -1)

{

perror("fail to timer_create");

exit(-1);

}

// XXX int timer_settime(timer_t timerid, int flags, const struct itimerspec *new_value,struct itimerspec *old_value);

// timerid--定时器标识

// flags--0表示相对时间,1表示绝对时间

// new_value--定时器的新初始值和间隔,如下面的it

// old_value--取值通常为0,即第四个参数常为NULL,若不为NULL,则返回定时器的前一个值

//第一次间隔it.it_value这么长,以后每次都是it.it_interval这么长,就是说it.it_value变0的时候会装载it.it_interval的值

struct itimerspec it;

it.it_interval.tv_sec = 1;

it.it_interval.tv_nsec = 0;

it.it_value.tv_sec = 1;

it.it_value.tv_nsec = 0;

if (timer_settime(timerid, 0, &it, NULL) == -1)

{

perror("fail to timer_settime");

exit(-1);

}

pause();

return 0;

}

/*

* int timer_gettime(timer_t timerid, struct itimerspec *curr_value);

* 获取timerid指定的定时器的值,填入curr_value

*

*/

程序2:通知方式为信号的处理方式

#include

#include

#include

#include

#include

#include

#define CLOCKID CLOCK_REALTIME

void sig_handler(int signo)

{

printf("timer_signal function! %d\n", signo);

}

int main()

{

// XXX int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

// signum--指定的信号编号,可以指定SIGKILL和SIGSTOP以外的所有信号编号

// act结构体--设置信号编号为signum的处理方式

// oldact结构体--保存上次的处理方式

//

// struct sigaction

// {

// void (*sa_handler)(int);//信号响应函数地址

// void (*sa_sigaction)(int, siginfo_t *, void *); //但sa_flags为SA——SIGINFO时才使用

// sigset_t sa_mask; //说明一个信号集在调用捕捉函数之前,会加入进程的屏蔽中,当捕捉函数返回时,还原

// int sa_flags;

// void (*sa_restorer)(void);//未用

// };

//

timer_t timerid;

struct sigevent evp;

struct sigaction act;

memset(&act, 0, sizeof(act));

act.sa_handler = sig_handler;

act.sa_flags = 0;

// XXX int sigaddset(sigset_t *set, int signum); //将signum指定的信号加入set信号集

// XXX int sigemptyset(sigset_t *set);//初始化信号集

sigemptyset(&act.sa_mask);

if (sigaction(SIGUSR1, &act, NULL) == -1)

{

perror("fail to sigaction");

exit(-1);

}

memset(&evp, 0, sizeof(struct sigevent));

evp.sigev_signo = SIGUSR1;

evp.sigev_notify = SIGEV_SIGNAL;

if (timer_create(CLOCK_REALTIME, &evp, &timerid) == -1)

{

perror("fail to timer_create");

exit(-1);

}

struct itimerspec it;

it.it_interval.tv_sec = 2;

it.it_interval.tv_nsec = 0;

it.it_value.tv_sec = 1;

it.it_value.tv_nsec = 0;

if (timer_settime(timerid, 0, &it, 0) == -1)

{

perror("fail to timer_settime");

exit(-1);

}

pause();

return 0;

}

linux定时器时间间隔为0,linux下定时器的使用--timer_create等系列相关推荐

  1. linux+c+时间间隔+ns,浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程...

    http://www.ibm.com/developerworks/cn/linux/1307_liuming_linuxtime1/index.html#ibm-pcon 本文试图完整地描述 Lin ...

  2. linux驱动基础开发0——linux 设备驱动概述-转

    目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用 ...

  3. linux编译gcc5.1.0,linux编译gcc-5.1.0

    最新的gcc-5.1.0才发布出来,迫不及待地装上试一试. 在外链网址已屏蔽下载gcc-5.1.0 然后解压到目录gcc-5.1.0/ 运行 ./contrib/download_prerequisi ...

  4. linux dd 尾部添加0,Linux命令dd的使用帮助 | Soo Smart!

    dd --help 常用dd来创建大文件,如dd if=/dev/zero of=/mybigfile bs=128M count=0 seek=24 参数: 1. if=文件名:输入文件名,缺省为标 ...

  5. linux top swap 为0,Linux:top

    top是一个经常用的命令,平时只是留意一下哪个进程用得比较高CPU或者内存,但这里还是有一些小学问: Top命令截图 Tasks Tasks 任务(进程),系统现在共有627个进程,其中处于运行中的有 ...

  6. linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT

    嵌入式Linux直流电机驱动.PPT 嵌入式Linux直流电机驱动实验 开发平台中直流电机驱动的实现 S3C2410芯片自带定时器,所以控制部分省去了三角波产生电路.脉冲调制电路和PWM信号延迟及信号 ...

  7. 非cpu0启动linux,SD卡无法启动Linux的问题及解决

    最近在Zynq板上启动linaro桌面系统时,发现一个奇怪的问题,系统在启动到最后,已经打印了如下信息:[drm] Initialized axi_hdmi_drm 1.0.0 20120930 on ...

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

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

  9. linux下定时器实现

    linux定时器:是指在每隔一段时间后就会进行一次相关操作,具有计时性的. 核心操作是如下方法 int setitimer(int which, const struct itimerval *res ...

最新文章

  1. 在一台电脑上使用两个github账号
  2. PostgreSQL获取年月日
  3. python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器
  4. Spring和Mybatis整合,配置文件
  5. 4.MyBatis全局配置文件SqlMapConfig.xml
  6. Windows10 【系统周期表】【系统下载表】【大型软件表】
  7. c#中.clear()作用_清单 .Clear()方法以及C#中的示例
  8. java单位数_java – 优化代码以查找给定数量N的阶乘的单位数
  9. 2018年NLP技术学习总结
  10. Java Web-网页基础-HTML-URL
  11. 【最短路】Walls
  12. 虚拟机怎么给c盘分配磁盘空间_虚拟机VMware V15.5详细图文安装教程
  13. hibernate3连oracle的各种坑。。
  14. 【对讲机的那点事】玩对讲机你知道中继台的工作原理吗?
  15. 一款免费好用的英文润色软件(1Checker没错,这是免费的)
  16. 输入输出文件处理:搜索文件夹里的文件与读取某一文件的信息 ——java
  17. uc极度精简版_UC浏览器安卓版-UC浏览器(UCBrowser)12.0.4.987 去广告精简版-东坡下载...
  18. 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
  19. 数据结构与算法——赫夫曼树基本实现
  20. Speedoffice(PPT)如何设置文字顶部对齐

热门文章

  1. Bootstrap+Font Awesome图标不显示 或显示错误解决办法
  2. POJ 2817 状态DP 字符串找最多的重复
  3. ASP.NET大闲话:ashx文件有啥用
  4. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
  5. C#无法生成解决方案,System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
  6. Embedding技术在推荐系统中的应用
  7. 【报告分享】2020年中国在线教育创新企业榜单.pdf(附下载链接)
  8. 【科普篇】推荐系统之矩阵分解模型
  9. 【报告分享】致胜直播带货十大法则.pdf(附下载链接)
  10. 【报告分享】2020年中国5G经济报告--助力新时代高质量发展.pdf(附下载链接)...