Linux函数以一定的间隔调用

时间:2013-04-18 13:30:49

标签: c++ c linux gcc

我需要能够在Linux上使用C / C ++以不同的间隔调用某些函数。这样做的最佳方法是什么?例如,我想在100hz调用a(),在10hz调用b(),在1hz调用c()。

2 个答案:

答案 0 :(得分:1)

您可以反复使用settimer来安排具有最接近期限的下一个函数调用。

答案 1 :(得分:1)

您可以使用Posix计时器,即timer_create(2)timer_settime(2)。然后,您想使用sigaction(2)设置信号处理程序。请注意,信号处理函数仅允许调用一组非常有限的函数(仅限 async-signal-safe 函数,但即使不是fprintfmalloc!) ,请参阅signal(7)并考虑在信号处理程序中设置volatile sigatomic_t变量(并在外部进行适当测试)。

您可能会改为使用某个事件循环(例如libev,或者使用poll(2)等多路复用系统调用来制作自己的事件循环...)。如果您正在编写图形应用程序(使用例如Qt或Gtk),那么您已经有了一个事件循环,因此请使用它(并且您还有图形工具包或事件循环函数提供的计时器)。

您可能还想查看timerfd_create(2)和朋友(并在您的事件循环或poll(2)来电中使用该描述符。)

阅读Advanced Linux Programming应该会有所帮助。

PS。使用旧内核和旧机器可能难以获得可靠的100Hz(或略高)定时器频率。您最近的内核的CONFIG_HIGH_RES_TIMERS=y文件中可能需要CONFIG_TIMERFD=yCONFIG_HPET_TIMER=y以及CONFIG_HZ_1000=y.config