我需要能够使用C/C++在Linux上以不同的时间间隔调用某些函数。什么是最好的方法来做到这一点?例如,我想在100hz调用(),在10h调用b(),在1hz调用c()。在某些时间间隔的Linux函数调用
回答
您可以重复使用settimer来安排接近最后期限的下一个函数调用。
我意识到,无论如何要在程序开始时设置以不同的间隔调用某些函数? – user1620479
间隔是偶数比率...因此每10个100hz的呼叫是10hz,每100个是1个hz。只要系统能够以期望的分辨率可靠地提供定时器,一个定时器就足够了。 –
您可以使用Posix计时器,即timer_create(2)和timer_settime(2)。然后,您要使用sigaction(2)设置信号处理程序。请注意,信号处理函数只允许调用一组非常有限的函数(仅限异步信号安全函数,但不包括fprintf
或malloc
!),请参阅,并考虑简单地在信号中设置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
。
- 1. linux C++如何在特定的时间间隔后调用函数
- 2. 在一定的时间后无限调用某些函数
- 3. 在指定的时间间隔后第一次调用函数
- 4. 想要在ASP.net中的时间间隔后调用函数
- 5. 在定期时间间隔内调用函数的API
- 6. 在特定的时间间隔后调用javascript函数
- 7. 以不同的时间间隔调用javascript函数
- 8. 阿贾克斯的时间间隔调用PHP函数
- 9. 如何以固定的时间间隔调用函数?
- 10. android:在某些特定时间间隔内报警remian停止
- 11. 如何在android中关闭应用程序时使用某些时间间隔?
- 12. 时间表()函数的Linux
- 13. 间隔后调用android中的函数?
- 14. 在某些时间或时间淡化
- 15. 在每个特定时间间隔后调度r函数
- 16. 显示某些单词经过一定的时间间隔后
- 17. 在某个固定的时间间隔内检索数据
- 18. 计算时间在某些状态的时间序列数据
- 19. 创建一个时间间隔,该时间间隔将导致函数在JavaScript中的随机时间运行
- 20. 如何以3秒的时间间隔检查函数的调用次数?
- 21. 调用某个函数在时间不起作用
- 22. 使用时间间隔在Javascript中调用辅助函数功能
- 23. android:在某些时间做某事
- 24. (Java Swing)以时间间隔调用函数并显示下一次调用标签的时间
- 25. 如何在一段时间后重复调用某个函数
- 26. R空间映射:使用类间隔函数创建间隔
- 27. linux grep/sed某些行 - 空间删除
- 28. 如何在某些事情完成时调用某个函数
- 29. 如何为动态间隔调度优化这些ocaml函数?
- 30. 计算两次函数之间的时间间隔呼叫
你有没有困扰谷歌“计时器在Linux上”? – StoryTeller
一些旧的Linux内核可能无法可靠地调用100Hz的函数。 –