- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于各种延时
在Linux中,如果是应用层下的一些应用,我们可以:
1)调用unsigned int sleep(unsigned int second);函数去定时,这个时候它是秒级的;头文件为unistd.h;
2)调用int usleep(useconds_t);函数去定时,这个时候它是微秒级的;头文件为unistd.h;
3)调用高精度睡眠int nanosleep(const struct timespec * rep, struct timespec *rem);是一个相比标准UNIX 的sleep 调用具有更高高精度的版本。和普通的sleep 调用计算整秒数不同,nanosleep 接受一个指向一个struct timespec 对象的指针作为参数,它可以表示毫微秒(nanosecond,十亿分之一秒)的时间。然而,了解 Linux 内核的工作细节后可知,nanosleep 所提供的真正精确度是10毫秒——比 sleep 提供的要精确。这个附加的精确度非常有用,比如说,可以根为反复进行的任务设置更短的间隔。
struct timespec 由两部分构成:tv_sec 表示整秒数部分;tv_nsec 则表示毫微秒。tv_nesc 的值必须小于109。
nanosleep 相比sleep具有另一个优点。与sleep 相同,nanosleep 调用可以被信号中断,这是errno 将被设置为 EINTR 而调用将返回 -1。但是,nanosleep 的第二个参数,另一个指向struct timespec 对象的指针,如果不为 NULL 则在这种情况下它将被写入剩余的时间(这就是所请求的睡眠时间和实际睡眠时间的差)。这使重新开始睡眠变的很容易。 头文件 time.h。
以下是内核中的:
1.udelay(); mdelay(); ndelay();实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的实现往往会碰到编译器的 警告implicit declaration of function udelay,这往往是由于头文件的使用不当造成的。在include/asm-???/delay.h中定义了udelay(),而在 include/linux/delay.h中定义了mdelay和ndelay.udelay一般适用于一个比较小的delay,如果你填的数大于 2000,系统会认为你这个是一个错误的delay函数,因此如果需要2ms以上的delay需要使用mdelay函数。
2.由于这些delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将使得调用它的进程睡眠参数指定的时间。
那么,在Windows中呢:
1)我们很快想到Sleep();头文件windows.h
然后再VC++中,找到了一篇不错的文章,转自这里,内容如下:
方法一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时 间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常 简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小 计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响 应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。 方法 二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常 低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太 长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。 方法三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。以下是实现2秒的延时代码: COleDateTime start_time = COleDateTime::GetCurrentTime(); COleDateTimeSpan end_time= COleDateTime::GetCurrentTime()-start_time; while(end_time.Get
您可能关注的文档
最近下载
- 全国第七届中小学音乐优质课比赛教学设计 跳圆舞曲小猫.pdf VIP
- 复合材料力学(全套课件).ppt VIP
- 社会支持评定量SSRS.pptx VIP
- 不良资产处置培训.pptx VIP
- 项目风险评估报告模板范例(标准版).docx
- 13-肿瘤基因组学.pptx VIP
- (正式版)D-L∕ T 646-2012 输变电钢管结构制造技术条件.docx VIP
- 外研版(2019)选择性必修 第四册Unit4 Everyday economics Using language 课件(共20张PPT).pptx VIP
- SL 72-2013水利建设项目经济评价规范.doc VIP
- JISB1181_螺母.pdf VIP
文档评论(0)