最近公司有個項目平台是ARM9 + linux, 在開發過程中遇到一個問題: 有一部分CAN通訊,需要250ms定時發送一幀數據包。於是我用select做了一個定時器發送。但是當這個多線程的程序真正跑起來,在接受端進行檢測。結果收到的該幀的時間間隔竟然是330ms左右。雖然預先我知道有偏差,但是330的時間間隔確實大大超出了預期!如果用setitimer的話,一是資源少,二是信號如果加入程序中,可能會帶來很多不必要的BUG。哪位大神有更好的定時器方法???
select定時器的精度是ms級,即使系統調度會出現延時,不可能延時達到100ms以上,再看測試用例,發送數據並在接收端接收網絡數據,因此估計延時時間的誤差應該是網絡數據發送和接收引起的,所以root cause 不在於定時器。