当前位置: 技术问答>linux和unix
关于在 red hat 下用posix timer实现高精度定时器的问题 急!!!
来源: 互联网 发布时间:2016-10-04
本文导语: 我在redhat enterprise5 (内核2.6.18)下用posix timer实现一个高精度定时器,按理说posix timer精度是可以达到纳秒的,而我设置的时间间隔是80微妙,可是测试发现定时器的精度根本就没有达到微妙级,更不用说...
我在redhat enterprise5 (内核2.6.18)下用posix timer实现一个高精度定时器,按理说posix timer精度是可以达到纳秒的,而我设置的时间间隔是80微妙,可是测试发现定时器的精度根本就没有达到微妙级,更不用说纳秒了,80微妙的时间间隔变成了2毫秒。。。仔细检查了下代码应该没问题,在UBUNTU上可以正确实现。代码在开发机上,不便上传。
请问有人遇到过类似情况么?如何解决?或者哪位高手告诉我怎么在redhat上实现高精度定时器吧。谢谢!
请问有人遇到过类似情况么?如何解决?或者哪位高手告诉我怎么在redhat上实现高精度定时器吧。谢谢!
|
你的这个程序不可能达到ns级别,
linux应用层理论上能达到的最大精度是每次时间中断间隔的时间. 这个tick间隔时间一般来说是1ms, 就算比1ms小,比1ns肯定是大了几个数量级.
OK, 就算是一次tick引发的时间1ms,那你当前进程因为pause()而处于suspend状态,过了1ms触发一个tick,产生一个信号,让你的进程唤醒,然后调度到你的进程进入运行状态, 从面进入你的信号处理函数,然后再printf输出你当前的时间. 这一切的动作都需要花费时间,也就是说当最终这个时间输出来的时候,可能已经过了2ms甚至更多, 所以你无法获得ns级的时间精度.
linux应用层理论上能达到的最大精度是每次时间中断间隔的时间. 这个tick间隔时间一般来说是1ms, 就算比1ms小,比1ns肯定是大了几个数量级.
OK, 就算是一次tick引发的时间1ms,那你当前进程因为pause()而处于suspend状态,过了1ms触发一个tick,产生一个信号,让你的进程唤醒,然后调度到你的进程进入运行状态, 从面进入你的信号处理函数,然后再printf输出你当前的时间. 这一切的动作都需要花费时间,也就是说当最终这个时间输出来的时候,可能已经过了2ms甚至更多, 所以你无法获得ns级的时间精度.
|
http://hi.baidu.com/ybzzzzz/blog/item/2bf442181f6e8db24bedbc6d.html
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。