日期:2014-05-16  浏览次数:20711 次

请教定时问题:
请教大侠:
想在实现0.5ms定时触发程序,请问如何实现好?
谢先!

------解决方案--------------------
select,参看APUE
------解决方案--------------------
实现不了这么小的精度吧.linux调度时长是20毫秒
------解决方案--------------------
哦,看成是0.5s了。。
------解决方案--------------------
内核里用 内核定时器,
应用程序里用 usleep or select
------解决方案--------------------
select可以精确到微秒,应该可以满足楼主的要求了
------解决方案--------------------
能执行到啊,我测试了一下,好使的.
------解决方案--------------------
$ vi a.c
$ gcc a.c
$ ./a.out
process id is 12264
count=2
Catch a signal -- SIGVTALRM
count=3
Catch a signal -- SIGVTALRM
count=4
Catch a signal -- SIGVTALRM

$

------解决方案--------------------
你捕获到信号没有,可能是你设的时间太短吧,你改下时间大小试一下.
------解决方案--------------------
我回去查了下书,linux的时钟中断是10ms,也就是说,隔10ms检查一下,时钟设置是否到期.
我觉得这应该说是linux的用户所试用的时间信号的精度至少在10ms吧.在内核中,对于时间精度要求高的
低于10ms的处理时,进入一个死循环,不停的检查jiff的值,jiff好象是时钟滴答数.用户程序这样做肯定不合适.
------解决方案--------------------
是的,当你设成0.5ms时,它也是到10ms处检查一次,当有些驱动程序的上半部太长时,还有可能会把几次的
时间信号压成一个来处理.
还有就是捕获信号,进入处理函数本身要一段时间.所有不管你设成多少,都有一个滞后性.