gpt4 book ai didi

c - C 中实时音频/图形 Linux 应用程序线程之间的排队/事件通信

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:47 25 4
gpt4 key购买 nike

我需要一些关于哪种 IPC 和哪种消息队列类型最适合我的特定情况(生产者/消费者、优先级和时序等)的建议。

我正在为 Linux (Ubuntu) 使用 C 语言开发一个实时音频/图形应用程序,它使用 OpenGL 和 SDL 图形、ALSA 音频 (MIDI)、POSIX pthreads 和外围硬件的自定义库。目前有一个主线程和一个与外围设备通信的线程。主线程将主图形绘制周期与控制音频录制/播放的代码结合在一起(或者更准确地说,是为循环录制/播放设置的 MIDI 事件)。

我需要将音频分离到它自己的线程中,因为主线程当前没有严格计时(即主绘制周期并不总是花费相同的时间来完成迭代,具体取决于从一次迭代中绘制的内容到下一个),这会阻止音频循环的“回放”(MIDI 事件的触发)在时间上保持恒定。

音频线程需要严格定时,以便录音/播放一致,并且需要从外设处理线程接收触发事件(注意可能有多个外设线程产生事件),但不等待对他们来说足够长以至于播放时间完全受到干扰。外围线程发送的触发事件需要与音频线程同步,以便当用户触发播放/录制音符时,它会在正确的时间播放(即立即播放音符时,或录制到录音循环中的正确位置)。

音频线程向图形线程发送“绘制”事件(我猜它仍将是主程序线程),图形线程应尽快绘制它们,以便图形事件与音频播放事件同步- 虽然图形线程不必像音频线程那样严格定时。

我希望这足够清楚,让人们能够建议我应该尝试什么。我不太熟悉队列算法、阻塞、锁和互斥等,但我了解基本概念,所以如果有人可以建议我应该查看哪种队列或消息传递算法,并链接到 C 中的任何示例/实现, 那太好了。非常感谢!

最佳答案

我会看一下 zeromq .它在为您简化其中许多概念方面做得非常出色。它本质上是一个神奇的传输层,可以为您排队,并且可以通过各种协议(protocol)(IPC、TCP 等)安排在各种拓扑结构中。它还具有出色的文档并且可以在 Windows 和 Linux 中运行。有任何重要语言的客户端库。

我喜欢把它想象成一个形状像尺蠖的 socket 。

关于c - C 中实时音频/图形 Linux 应用程序线程之间的排队/事件通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com