Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以给定的时间频率(计时器)执行函数的最佳方式?_C_Linux_Timer_Embedded Linux - Fatal编程技术网

C 以给定的时间频率(计时器)执行函数的最佳方式?

C 以给定的时间频率(计时器)执行函数的最佳方式?,c,linux,timer,embedded-linux,C,Linux,Timer,Embedded Linux,我有一个小程序,需要在一个小型Linux嵌入式系统(ARM)中运行。它是用C编写的。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应该每秒轮询30次(30Hz) 用C语言做这件事最好的方法是什么?我见过使用sleep()的解决方案,但它似乎不是该作业的最佳选择。sleep()在几秒钟内暂停执行,如果您正在寻找更精确的类似sleep()的函数,请使用它在几微秒内暂停执行,或在纳秒。 < P>我建议考虑使用多路复用SysCurl来进行轮询。 请注

我有一个小程序,需要在一个小型Linux嵌入式系统(ARM)中运行。它是用C编写的。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应该每秒轮询30次(30Hz)


用C语言做这件事最好的方法是什么?我见过使用
sleep()
的解决方案,但它似乎不是该作业的最佳选择。

sleep()
在几秒钟内暂停执行,如果您正在寻找更精确的类似sleep()的函数,请使用它在几微秒内暂停执行,或在纳秒。

< P>我建议考虑使用多路复用SysCurl来进行轮询。 请注意,当
poll
正在等待并轮询输入时,它不会占用任何CPU

如果每个事件的处理需要一些重要的时间(例如毫秒或更长),您可能需要重新计算延迟

您可以使用(并提供设备文件描述符和计时器fd来轮询)。另见

也许会有用


阅读绝对是有用的。也许还有这本书。

?你能详细说明答案吗?使用这两种方法的优点是什么?我希望此进程在计算机上“永远”运行(正常运行时间>30天),我希望尽可能多地释放CPU。如果在计时器事件之间不执行任何操作,则可以使用例如
nanosleep
,则在睡眠结束之前,您的进程将不执行任何操作(包括不占用任何CPU)。如果您想在计时器运行时执行操作,那么POSIX计时器事件就是您想要的。一个问题:您说,“我见过使用
sleep()
的解决方案,但它似乎不是该作业的最佳选项。”-确切地说,为什么?