我需要能够在Linux上使用C / C ++以不同的间隔调用某些函数。这样做的最佳方法是什么?例如,我想在100hz调用a(),在10hz调用b(),在1hz调用c()。
答案 0 :(得分:1)
您可以反复使用settimer来安排具有最接近期限的下一个函数调用。
答案 1 :(得分:1)
您可以使用Posix计时器,即timer_create(2)和timer_settime(2)。然后,您想使用sigaction(2)设置信号处理程序。请注意,信号处理函数仅允许调用一组非常有限的函数(仅限 async-signal-safe 函数,但即使不是fprintf
或malloc
!) ,请参阅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=y
和CONFIG_HPET_TIMER=y
以及CONFIG_HZ_1000=y
和.config
。