在ab中调用函数(C/C++)的官方方法是什么?在Linux上每1/100秒?

ern*_*rn0 5 c c++ linux real-time timer

我有一个用C++编写的异步数据流系统.在数据流体系结构中,应用程序是一组组件实例,它们在启动时初始化,然后它们使用预定义的消息相互通信.有一种称为Pulsar的组件类型,它为连接到其中一个组件的其他组件提供"时钟信号消息"(例如,延迟).它每隔X ms触发一次消息(调用数据流调度程序API),其中X是"frequency"参数的值,以ms为单位.

简而言之,任务只是在每X ms调用一个函数(方法).问题是:最好/官方的方式是什么?它有什么模式吗?

我找到了一些方法:

  • 使用SIGALRM.我认为,信号不适合这个目的.尽管如此,分辨率是1秒,这太罕见了.
  • 使用HW中断.我不需要这种精确性.此外,我知道使用硬件相关的解决方案(服务器是为几个平台编译的,例如ARM).
  • 测量经过的时间,然后用usleep()直到下次呼叫.我不确定这是通过5个线程来测量与时间相关的系统调用的时间的最佳方法,每秒10次 - 但也许我错了.
  • 使用RealTime内核函数.我什么都不知道.此外,我不需要晶体精确调用,它不是一个atomreactor,我不能在某些平台上安装RT内核(也就是2.6.x Kernel可用).

也许,最好的答案是音频/视频播放器的源代码(我自己无法找到/理解)的一个简短评论部分.

更新(由@MSalters请求):DF项目的共同作者正在使用Mac OSX,因此我们应该找到适用于大多数Posix-Compilant操作系统的解决方案.系统,不仅仅是在Linux上.也许,将来会有一个使用BSD的目标设备,或者一些受限制的Linux.

Cub*_*bbi 2

老实说,我认为在所谓的异步数据流系统中必须有一个“脉冲星”是一个设计缺陷。它要么是异步的,要么具有同步时钟事件。

如果您有一个需要延迟的组件,请通过boost::asio::deadline_timer.async_wait或任何较低级别的解决方案(select()/epoll()/timer_create()/等)请求延迟。不管怎样,最有效的C++解决方案可能是 boost.asio 计时器,因为它们将使用在您的 Linux 内核版本上最有效的任何计时器。

  • 好吧,就目前的设计而言,我会使用timer_create()/timer_settime()。不要忘记将 SIGEV_THREAD 放在 sigev_notify 中以用于timer_create,以便它将计时器到期传递给线程,而不是进程。它不会是“官方 C++ 方式”,但它将是“官方 POSIX 方式”。 (2认同)