ern*_*rn0 5 c c++ linux real-time timer
我有一个用C++编写的异步数据流系统.在数据流体系结构中,应用程序是一组组件实例,它们在启动时初始化,然后它们使用预定义的消息相互通信.有一种称为Pulsar的组件类型,它为连接到其中一个组件的其他组件提供"时钟信号消息"(例如,延迟).它每隔X ms触发一次消息(调用数据流调度程序API),其中X是"frequency"参数的值,以ms为单位.
简而言之,任务只是在每X ms调用一个函数(方法).问题是:最好/官方的方式是什么?它有什么模式吗?
我找到了一些方法:
也许,最好的答案是音频/视频播放器的源代码(我自己无法找到/理解)的一个简短评论部分.
更新(由@MSalters请求):DF项目的共同作者正在使用Mac OSX,因此我们应该找到适用于大多数Posix-Compilant操作系统的解决方案.系统,不仅仅是在Linux上.也许,将来会有一个使用BSD的目标设备,或者一些受限制的Linux.
老实说,我认为在所谓的异步数据流系统中必须有一个“脉冲星”是一个设计缺陷。它要么是异步的,要么具有同步时钟事件。
如果您有一个需要延迟的组件,请通过boost::asio::deadline_timer.async_wait或任何较低级别的解决方案(select()/epoll()/timer_create()/等)请求延迟。不管怎样,最有效的C++解决方案可能是 boost.asio 计时器,因为它们将使用在您的 Linux 内核版本上最有效的任何计时器。