linux下实现定时器,在Linux操作系统下实现定时器简介

在Linux实现一个定时器,不像Win32下那样直观。在Win32调用SetTimer就行了,在Linux下则没有相应函数可以直接调用。定时器作为一个常用的功能,在Linux当然也有相应实现。下面我们看看几种常用的方法。

要实现定时器功能,最土的办法实现莫过于用sleep/usleep来实现了。当然,它会阻塞当前线程,除了处理定时功能外,什么活也干不了。当然要解决这个问题不难,创建一个单独的线程来负责定时器,其它线程负责正常的任务就行了。

要实现定时器功能,最简单的办法就是ALARM信号。这种方法简单,也相应的缺陷:用信号实现效率较低; 最小精度为1秒,无法实现高精度的定义器。简单示例:

#include

#include

static void timer(int sig)

{

if(sig == SIGALRM)

{

printf("timer\n");

}

return;

}

int main(int argc, char* argv[])

{

signal(SIGALRM, timer);

alarm(1);

getchar();

return 0;

}

setitimer和alarm有类似的功能,也是通过信号来实现。

最优雅的方法是使用RTC机制。利用select函数,你可以用单线程实现定时器,同时还可以处理其它任务。简单示例:

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char* argv[])

{

unsigned long i = 0;

unsigned long data = 0;

int retval = 0;

int fd = open ("/dev/rtc", O_RDONLY);

if(fd < 0)

{

perror("open");

exit(errno);

}

/*Set the freq as 4Hz*/

if(ioctl(fd, RTC_IRQP_SET, 4) < 0)

{

perror("ioctl(RTC_IRQP_SET)");

close(fd);

exit(errno);

}

/*Set the freq as 4Hz*/

if(ioctl(fd, RTC_IRQP_SET, 4) < 0)

{

perror("ioctl(RTC_IRQP_SET)");

close(fd);

exit(errno);

}

/* Enable periodic interrupts */

if(ioctl(fd, RTC_PIE_ON, 0) < 0)

{

perror("ioctl(RTC_PIE_ON)");

close(fd);

exit(errno);

}

for(i = 0; i < 100; i++)

{

if(read(fd, &data, sizeof(unsigned long)) < 0)

{

perror("read");

close(fd);

exit(errno);

}

printf("timer\n");

}

/* Disable periodic interrupts */

ioctl(fd, RTC_PIE_OFF, 0);

close(fd);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言课程设计大作业模版,c语言课程设计报告模板下载

c语言课程设计报告模板是一款专业的设计模板&#xff0c;对于在大学有需要些设计报告的朋友&#xff0c;可以下载这款模板作为参考&#xff0c;了解设计报告的需求&#xff0c;基本上毕业的论文设计也是在这个基础上严格要求的&#xff0c;欢迎下载使用。C语言介绍C语言是一门面…

c语言error和,C语言ERROR精选.doc

C语言ERROR精选Ambiguous operators need parentheses ) ~. [1 L: f& a/ J不明确的运算需要用括号括起 # n5 J! G c( m: ! o& \( P. CAmbiguous symbol xxx - n# d??i/ t0 K8 M不明确的符号 6 r% o0 \- N! _2 UArgument list syntax error % l, j/ O9 \; x1 j1 e参数…

c语言如何把变量按位颠倒,求答案,用C语言编程,用户输入一个正整数,把他的各位数字前后颠倒,并输入点到后的结果...

满意答案q15173278975推荐于 2017.11.26采纳率&#xff1a;58% 等级&#xff1a;13已帮助&#xff1a;5665人用字符串处理很简单#include #include void main (){int n,i;char s[20];scanf("%d", &n);sprintf(s,"%d", n);printf("%d\n",s…

中南大学12月13日考c语言,中南大学2010级C语言试卷

中南大学考试试卷2010 -- 2011 学年 1 学期 时间110分钟学时学分 考试形式&#xff1a;班级 学号 姓名 总分100分,占总评成绩70 %一、选择题(每小题1.5分,共计30分)1. C语言中变量定义与使用的关系是 。A) 必须先定义&#xff0c;后使用 B)可以先使用&#xff0c;后定义 C) 可以…

c语言123报数,新人求解一道C语言题。。。麻烦了

有一百个人按编号排成一队&#xff0c;从1开始按123123报数&#xff0c;报3者退出&#xff0c;直到队尾&#xff0c;又从队尾向队首报数(1开始)&#xff0c;依旧报3的退出&#xff0c;重复执行直至队列剩2个&#xff0c;求此2人的原始编号&#xff0c;这是题目&#xff0c;下面…

素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...

匿名用户1级2016-09-04 回答基本思想用筛法求素数的基本思想是&#xff1a;把从1开始的、某一范围内的正整数从小到大顺序排列&#xff0c; 1不是素数&#xff0c;首先把它筛掉。剩下的数中选择最小的数是素数&#xff0c;然后去掉它的倍数。依次类推&#xff0c;直到筛子为空时…

android activity动态显示不出来,uiautomatorviewer 获取不到动态页面解决办法

以前玩 PC 最近刚搞 app 测试&#xff0c;费好大劲环境装好&#xff0c;高兴的点击 uiautomatorviewer.bat 想去抓取页面元素&#xff0c;尴尬的是首页就直接报错。Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesnt exis…

谷歌tts android手机自带引擎,Android使用讯飞语记引擎实现中文TTS

1.首先去讯飞语记官网下载并安装APP&#xff1a;2.设置语音引擎&#xff1a;设置>语言和输入法>文字转语音(TTS)输出>首选引擎3.在代码中使用&#xff1a;import android.content.Context;import android.speech.tts.TextToSpeech;import android.util.Log;import jav…

android xml 画下划线,android – strings.xml:如何从标记前面的空格中删除下划线?...

我的strings.xml中有以下行&#xff1a;This is a test在我的活动xml中,我在TextView中引用了这个字符串&#xff1a;android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"string/test_string" />奇怪的是,当…

android开发基本知识,Android应用开发基本知识点汇总

Activity一生命周期4种状态running/paused/stopped/killed生命周期Activity发动onCreate->onStart->onResume点Home回来主界面onPause->onStop再次回到原ActivityonRestart->onStart->onResume退出ActivityonPause->onStop->onDestroy进程优先级前台&…

android hls检测,安卓大部分浏览器播放HLS协议直播流会从头开始

遇到的问题HLS直播流在iOS系统中表现正常&#xff0c;但在安卓使用大部分浏览器(UC浏览器除外)播放ffmpeg生成的HLS直播流都会发生从头播放的问题&#xff0c;即不管何时播放直播流&#xff0c;都会从直播开头的内容开始播放(生成的第一个直播TS切片&#xff0c;eg:电影开始直播…

华为鸿蒙os2.0系统何时搭载手机,鸿蒙OS 2.0系统正式发布!余承东:明年华为系手机将会搭载...

原标题&#xff1a;鸿蒙OS 2.0系统正式发布&#xff01;余承东&#xff1a;明年华为系手机将会搭载由于众所周知的原因&#xff0c;华为手机这两年过的很艰难&#xff0c;尤其是今年力度大了后&#xff0c;华为手机接下来可能面临无芯片可用的严重情况。而除了一些硬件外&#…

html气泡写法,制作CSS气泡框

气泡状文本框&#xff0c;是一种很生动的网页设计手段。它可以用来表示用户的发言。也可以用来作为特定信息的提示符。DVD租借网站Netflix&#xff0c;还用它显示碟片的详细信息。制作CSS气泡框的传统方法&#xff0c;需要5张背景图片&#xff0c;分别是&#xff1a;*tl.gif&am…

html5按钮超链接一个文本文档,怎么做word文档超链接

怎么做word文档超链接超链接&#xff0c;常见于网页制作中&#xff0c;是将两个网页之间建立链接关系&#xff0c;即当点击一个A对象的时&#xff0c;自动跳转到另一个B对象的位置&#xff0c;从而快速查阅网页内容。接下来小编为大家推荐的是word文档超链接相关内容&#xff0…

.net html5 框架,ASP.NET - 介绍 ASP.NET Web 窗体框架的导航 | Microsoft Docs

MVC07/08/2015本文内容介绍 ASP.NET Web 窗体框架的导航ASP.NET Web 窗体框架的导航是一个托管在 navigation.codeplex.com 上的开源项目&#xff0c;该框架使您可以采用单元测试范围来编写 Web 窗体代码&#xff0c;同时遵循“切勿重复”(DRY) 原则&#xff0c;从而使 ASP.NET…

html教程padding,HTML CSS——margin和padding的学习

一、什么是边距CSS中的边距指的是当前元素border与周围其它元素border的距离(或者称为空间)。二、什么是内边距&#xff0c;什么是外边距代码2-1&#xff1a;html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.d…

html中最右边,html – 如何获得最右边的列填充剩余空间?

我找到了一个简单的解决方案&#xff1a;table td:last-child {width: 100%;}结果&#xff1a;body {font: 12px "Sans serif";}table {width: 100%;background-color: #222222;color: white;border-collapse: collapse;}table th {padding: 10px;text-align: left;}…

html5的交互标签,html5里交互元素的使用方法

在H5里&#xff0c;交互元素就是和用户进行互动的元素&#xff0c;这一部分非常的重要&#xff0c;并且和之前的JS控制的效果不同&#xff0c;H5相比于HTML增加了很多的交互元素&#xff0c;比如隐藏显示注脚就是其中的一个交互效果。交互元素的使用body{font-size: 12px;}span…

image 3d view HTML5,Cute Slider - 3D 2D HTML5 Image Slider

IMPORTANT!We can NOT provide support for this item since Feb 2015. If you would like to use our item, we highly recommend to use our brand new slider “Master Slider”Cute Slider is a unique and easy to use slider with awesome 3D and 2D transition effects,…

适合计算机社团活动的游戏,适合大学社团活动“游戏”有哪些?

20个适合大学生活动的游戏推荐1、无敌烽火轮规则&#xff1a;各组统一在风火轮内站好&#xff0c;由裁判统一发布口令出发。行进途中&#xff0c;风火轮必须垂直地面,不能将所提供的道具剪裁、折叠&#xff0c;道具纸必须紧密相连。所有组员必须在圈内&#xff0c;身体的任何部…