最近公司有个项目平台是ARM9 + linux, 在开发过程中遇到一个问题: 有一部分CAN通讯,需要250ms定时发送一帧数据包。于是我用select做了一个定时器发送。但是当这个多线程的程序真正跑起来,在接受端进行检测。结果收到的该帧的时间间隔竟然是330ms左右。虽然预先我知道有偏差,但是330的时间间隔确实大大超出了预期!如果用setitimer的话,一是资源少,二是信号如果加入程序中,可能会带来很多不必要的BUG。哪位大神有更好的定时器方法???
select定时器的精度是ms级,即使系统调度会出现延时,不可能延时达到100ms以上,再看测试用例,发送数据并在接收端接收网络数据,因此估计延时时间的误差应该是网络数据发送和接收引起的,所以root cause 不在于定时器。