我想征求意见。因为我不是很有经验的C++用户。我对线程缺乏一些了解 - 但我在Android上做了很多工作,所以我知道大致的想法。
我需要一次写入 8 *.wav 个文件。我经常有一个回调,来自 8 个输入通道的即将到来的信号。我需要将数据从每个通道(录音)保存到 *.wav。这要求我每次获取新数据时都打开文件,并在文件末尾写入额外的 256 个数据样本。
使用 2 个输入这样做很好,但在 3 个或更多输入后,我的输入延迟开始增加。处理器滞后,所以可能我必须在某种线程中执行此操作。
我认为这应该是很普遍的问题,但我还没有学会如何处理它。有人可以解释我正确的方法吗?是否有必要 http://www.cplusplus.com/reference/thread/thread/使用它,或者是否有任何其他简单/优雅的模式。
您需要记录或保存来自 8 个输入通道的数据。
我强烈建议至少 8 个大型缓冲区来包含数据。
当输入或后台暂停时,您可以将数据写入文件。 等待收集大量数据,然后再将缓冲区写入文件。 文件 I/O 喜欢处理大块数据,而不是许多小数据块。 您始终可以刷新输出流,以告知操作系统写入文件。
如果你想玩线程,我建议至少三个。
线程 1 -- 读取输入通道并存储在缓冲区中。
线程 2 -- 图形用户界面
线程 3 -- 将缓冲区写入文件。
请记住,线程 1 是最高优先级。 当它看到缓冲区中剩余的空间很少时,它应该唤醒线程 3 以将缓冲区写出到文件中。
应为每个输入通道至少保留 2 个缓冲区。 这称为双缓冲,允许线程 3 将缓冲区写入文件,而线程 1 将输入通道数据读取到另一个缓冲区。