我有一个小程序,需要在小型Linux嵌入式系统(ARM)中运行。它用C语言编写。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应每秒轮询30次(30Hz)。
在C中最好的方法是什么?我已经看过使用sleep()
的解决方案,但它似乎不是这项工作的最佳选择。
答案 0 :(得分:3)
我建议考虑使用poll(2)多路复用系统调用进行轮询。
注意到当poll
正在等待并轮询输入时,它不消耗任何CPU
如果每个事件的处理需要一些重要时间(例如毫秒或更长时间),您可能需要重新计算延迟。
您可以使用timerfd_create(2)(并同时提供设备文件描述符和计时器fd以进行轮询)。另见timer_create(2) ...
也许clock_gettime(2)可能有用。
阅读time(7)绝对有用。也许还有Advanced Linux Programming书。
答案 1 :(得分:2)
sleep()
在几秒钟内暂停执行,如果您正在寻找更准确的sleep() - 类似函数,请使用usleep()
暂停执行,以微秒为单位,或nanosleep()
以纳秒为单位。< / p>