C 以给定的时间频率(计时器)执行函数的最佳方式?
我有一个小程序,需要在一个小型Linux嵌入式系统(ARM)中运行。它是用C编写的。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应该每秒轮询30次(30Hz)C 以给定的时间频率(计时器)执行函数的最佳方式?,c,linux,timer,embedded-linux,C,Linux,Timer,Embedded Linux,我有一个小程序,需要在一个小型Linux嵌入式系统(ARM)中运行。它是用C编写的。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应该每秒轮询30次(30Hz) 用C语言做这件事最好的方法是什么?我见过使用sleep()的解决方案,但它似乎不是该作业的最佳选择。sleep()在几秒钟内暂停执行,如果您正在寻找更精确的类似sleep()的函数,请使用它在几微秒内暂停执行,或在纳秒。 < P>我建议考虑使用多路复用SysCurl来进行轮询。 请注
用C语言做这件事最好的方法是什么?我见过使用
sleep()
的解决方案,但它似乎不是该作业的最佳选择。sleep()
在几秒钟内暂停执行,如果您正在寻找更精确的类似sleep()的函数,请使用它在几微秒内暂停执行,或在纳秒。 < P>我建议考虑使用多路复用SysCurl来进行轮询。
请注意,当poll
正在等待并轮询输入时,它不会占用任何CPU
如果每个事件的处理需要一些重要的时间(例如毫秒或更长),您可能需要重新计算延迟
您可以使用(并提供设备文件描述符和计时器fd来轮询)。另见
也许会有用
阅读绝对是有用的。也许还有这本书。?你能详细说明答案吗?使用这两种方法的优点是什么?我希望此进程在计算机上“永远”运行(正常运行时间>30天),我希望尽可能多地释放CPU。如果在计时器事件之间不执行任何操作,则可以使用例如
nanosleep
,则在睡眠结束之前,您的进程将不执行任何操作(包括不占用任何CPU)。如果您想在计时器运行时执行操作,那么POSIX计时器事件就是您想要的。一个问题:您说,“我见过使用sleep()
的解决方案,但它似乎不是该作业的最佳选项。”-确切地说,为什么?