三九宝宝网宝宝百科宝宝知识

怎样在Linux下实现精确定时器

01月10日 编辑 39baobao.com

[课堂教学中如何实现有效师生互动]1.学习目标合理的学习目标是师生互动与合作的基础。学习目标要符合学生的“最近发展区”, 让大多数学生“跳一跳够得着”,从而保持兴奋的持久性,学生为了达到学习目标增强了探...+阅读

linux下使用select实现精确定时器 在编写程序时,我们经常回用到定时器。本文讲述如何使用select实现超级时钟。使用select函数,我们能实现微妙级别精度的定时器。同时,select函数也是我们在编写非阻塞程序时经常用到的一个函数。首先看看select函数原型如下:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 参数说明:slect的第一个参数nfds为fdset集合中最大描述符值加1,fdset是一个位数组,其大小限制为__FD_SETSIZE(1024),位数组的每一位代表其对应的描述符是否需要被检查。select的第二三四个参数表示需要关注读、写、错误事件的文件描述符位数组,这些参数既是输入参数也是输出参数,可能会被内核修改用于标示哪些描述符上发生了关注的事件。所以每次调用select前都需重新初始化fdset。timeout参数为超时时间,该结构会被内核修改,其值为超时剩余的时间。利用select实现定时器,需要利用其timeout参数,注意到: 1)select函数使用了一个结构体timeval作为其参数。 2)select函数会更新timeval的值,timeval保持的值为剩余时间。如果我们指定了参数timeval的值,而将其他参数都置为0或者NULL,那么在时间耗尽后,select函数便返回,基于这一点,我们可以利用select实现精确定时。timeval的结构如下:struct timeval{ long tv_sec;/*secons* long tv_usec;/*microseconds*/ } 我们可以看出其精确到microseconds也即微妙。

一、秒级定时器 void seconds_sleep(unsigned seconds){ struct timeval tv; tv.tv_sec=seconds; tv.tv_usec=0; int err; do{ err=select(0,NULL,NULL,NULL,&tv); }while(err}

二、毫秒级别定时器 void milliseconds_sleep(unsigned long mSec){ struct timeval tv; tv.tv_sec=mSec/1000; tv.tv_usec=(mSec%1000)*1000; int err; do{ err=select(0,NULL,NULL,NULL,&tv); }while(err}

三、微妙级别定时器 void microseconds_sleep(unsigned long uSec){ struct timeval tv; tv.tv_sec=uSec/1000000; tv.tv_usec=uSec%1000000; int err; do{ err=select(0,NULL,NULL,NULL,&tv); }while(err} 现在我们来编写几行代码看看定时效果吧。#include #include #include int main() { int i; for(i=0;i printf("%d\n",i); //seconds_sleep

(1); //milliseconds_sleep(1500); microseconds_sleep(1900000); } } 注:timeval结构体中虽然指定了一个微妙级别的分辨率,但内核支持的分别率往往没有这么高,很多unix内核将超时值向上舍入成10ms的倍数。此外,加上内核调度延时现象,即定时器时间到后,内核还需要花一定时间调度相应进程的运行。因此,定时器的精度,最终还是由内核支持的分别率决定。

以下为关联文档:

怎样实现数学课堂中师生的有效互动师生互动现象在课堂教学中是客观存在的,贯穿课堂教学的全过程。根据其产生效果的不同,可以把师生互动分为正互动和负互动。正互动就是指能取得积极效果的互动方式,即有效的师生...

求问如何在课堂教学中实现有效的师生互动一、师生互动的含义课堂教学中的师生互动,是指在课堂教学中,教师与学生间发生的一切相互作用与影响,由此引发的双方在心理上与行为上的改变。按互动的对象进行划分,可以分为师生...

如何实现师生积极互动如何实现师生积极互动师生互动现象在课堂教学中是客观存在的,贯穿课堂教学的全过程。根据其产生效果的不同,可以把师生互动分为正互动和负互动。正互动就是指能取得积极效果的...

unity3d如何才能实现移动鼠标来控制3d物体using System.Collections; using System.Collections.Generic; using UnityEngine; public gameobject a;//你要控制的物体 public class Move : MonoBehaviour { void Upda...

如何成功实现终端动销成功实现终端动销的方法: 首先,要想实现终端动销,必须要在渠道激励这一块有所表示。俗语说,天下熙熙,皆为利来;天下攘攘,皆为利往。毕竟产品要经过渠道和终端这一环节,才能实现最终...

当前产品已经上市如何快速实现动销呢新品上市,若不能动销,则风险很大。 上海杰信咨询公司独创的实效新品上市动销模型,可以有效地帮助企业降低风险。充分发挥首轮目标消费群的标杆价值,设置心理动力机制渠道,促使他...

Excel请教如何在Excel中实现摘要筛选你好。请按照以下方式进行操作。 首先打开需要筛选的Excel文档,点击“开始>排序和筛选>筛选”选项,如图所示。 按上述操作后,数据中的表头就会变成筛选模式,右下角都会带有...

澳洲教育专业如何实现移民您好,很高兴能够回答您的问题。 不被大家所熟知的教学专业 其实教师职业的门槛很高,在澳洲大多数大学的就读Education或Teaching方面的Bachelor和Master,雅思基本要求是平均7分...

关于在linux下如何实现定时器的请教好像可以精确倒微妙级别int main(int argc, char **argv){ struct itimerval value, ovalue; int nread; char *dev ="/dev/ttyS0"; //com0 为 ttyS0 serial_fd = open(dev, O...

推荐阅读
图文推荐