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

标签 c++ c linux timer real-time

我有一个用 C++ 编写的异步数据流系统。在数据流架构中,应用程序是一组组件实例,它们在启动时被初始化,然后它们通过预定义的消息相互通信。有一种称为 Pulsar 的组件类型,它向连接到它的其他组件(例如延迟)提供“时钟信号消息”。它每 X 毫秒触发一次消息(调用数据流调度程序 API),其中 X 是“频率”参数的值,以毫秒为单位给出。

简而言之,任务就是每隔 X 毫秒调用一个函数(方法)。问题是:最好的/官方的方法是什么?有什么规律吗?

我找到了一些方法:

  • 使用 SIGALRM。我认为,信号不适合这个目的。虽然分辨率是1秒,但是太难得了。
  • 使用硬件中断。我不需要这种精确性。此外,我知道使用与硬件相关的解决方案(服务器是为多个平台编译的,例如 ARM)。
  • 测量耗时,并使用 usleep() 直到下一次调用。我不确定这是测量时间的最佳方法,通过 5 个线程调用与时间相关的系统调用,每个线程 10 次第二 - 但也许我错了。
  • 使用实时内核函数。我对此一无所知。另外,我不需要 Crystal 精确调用,它不是原子 react 器,我无法在某些平台上安装 RT 内核(另外,2.6.x 内核可用)。

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

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

最佳答案

如果您不需要硬实时保证,usleep 应该可以胜任。如果您想要硬实时保证,则需要基于中断或基于实时内核的功能。

关于c++ - 在 ab 中调用函数(C/C++)的官方方法是什么?在 Linux 上每 1/100 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699266/

相关文章:

c++ - C/C++ 基本类型是原子的吗?

c - 在 header 中初始化静态变量

c - 函数原型(prototype)中的顶级 volatile 或 restrict 是否重要?

c - 从不同函数访问分配的数组时出现 SegFault

python - 在 Ubuntu 中调用 py 导致 collections.abc 弃用警告

linux - 如何在 Linux 上的文件扩展名前批量添加日期

c++ - QNetworkAccessManager稍后在添加请求时删除

c++ - 如何将变量的内容存入const char*?

c++ - 什么 API 会启动 FTP 传输并向 GUI 报告状态?

linux - 如何在 Linux Fedora 中安装 bower?