linux定时器时间间隔为0,linux下定时器的使用--timer_create等系列
直接上程序
程序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等系列相关推荐
- linux+c+时间间隔+ns,浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程...
http://www.ibm.com/developerworks/cn/linux/1307_liuming_linuxtime1/index.html#ibm-pcon 本文试图完整地描述 Lin ...
- linux驱动基础开发0——linux 设备驱动概述-转
目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和Linux API进行应用 ...
- linux编译gcc5.1.0,linux编译gcc-5.1.0
最新的gcc-5.1.0才发布出来,迫不及待地装上试一试. 在外链网址已屏蔽下载gcc-5.1.0 然后解压到目录gcc-5.1.0/ 运行 ./contrib/download_prerequisi ...
- linux dd 尾部添加0,Linux命令dd的使用帮助 | Soo Smart!
dd --help 常用dd来创建大文件,如dd if=/dev/zero of=/mybigfile bs=128M count=0 seek=24 参数: 1. if=文件名:输入文件名,缺省为标 ...
- linux top swap 为0,Linux:top
top是一个经常用的命令,平时只是留意一下哪个进程用得比较高CPU或者内存,但这里还是有一些小学问: Top命令截图 Tasks Tasks 任务(进程),系统现在共有627个进程,其中处于运行中的有 ...
- linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT
嵌入式Linux直流电机驱动.PPT 嵌入式Linux直流电机驱动实验 开发平台中直流电机驱动的实现 S3C2410芯片自带定时器,所以控制部分省去了三角波产生电路.脉冲调制电路和PWM信号延迟及信号 ...
- 非cpu0启动linux,SD卡无法启动Linux的问题及解决
最近在Zynq板上启动linaro桌面系统时,发现一个奇怪的问题,系统在启动到最后,已经打印了如下信息:[drm] Initialized axi_hdmi_drm 1.0.0 20120930 on ...
- linux定时器错误使用,linux下定时器的使用
Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...
- linux下定时器实现
linux定时器:是指在每隔一段时间后就会进行一次相关操作,具有计时性的. 核心操作是如下方法 int setitimer(int which, const struct itimerval *res ...
最新文章
- 在一台电脑上使用两个github账号
- PostgreSQL获取年月日
- python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器
- Spring和Mybatis整合,配置文件
- 4.MyBatis全局配置文件SqlMapConfig.xml
- Windows10 【系统周期表】【系统下载表】【大型软件表】
- c#中.clear()作用_清单 .Clear()方法以及C#中的示例
- java单位数_java – 优化代码以查找给定数量N的阶乘的单位数
- 2018年NLP技术学习总结
- Java Web-网页基础-HTML-URL
- 【最短路】Walls
- 虚拟机怎么给c盘分配磁盘空间_虚拟机VMware V15.5详细图文安装教程
- hibernate3连oracle的各种坑。。
- 【对讲机的那点事】玩对讲机你知道中继台的工作原理吗?
- 一款免费好用的英文润色软件(1Checker没错,这是免费的)
- 输入输出文件处理:搜索文件夹里的文件与读取某一文件的信息 ——java
- uc极度精简版_UC浏览器安卓版-UC浏览器(UCBrowser)12.0.4.987 去广告精简版-东坡下载...
- 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
- 数据结构与算法——赫夫曼树基本实现
- Speedoffice(PPT)如何设置文字顶部对齐
热门文章
- Bootstrap+Font Awesome图标不显示 或显示错误解决办法
- POJ 2817 状态DP 字符串找最多的重复
- ASP.NET大闲话:ashx文件有啥用
- myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
- C#无法生成解决方案,System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
- Embedding技术在推荐系统中的应用
- 【报告分享】2020年中国在线教育创新企业榜单.pdf(附下载链接)
- 【科普篇】推荐系统之矩阵分解模型
- 【报告分享】致胜直播带货十大法则.pdf(附下载链接)
- 【报告分享】2020年中国5G经济报告--助力新时代高质量发展.pdf(附下载链接)...