gpt4 book ai didi

c++ - 如何配置音频回调

转载 作者:行者123 更新时间:2023-12-03 02:14:09 25 4
gpt4 key购买 nike

我在写音乐播放器。我已经做了很多工作来改善音频回调的性能:

  • 所有解码等当然都在单独的线程中完成。这将填满一些缓冲区。
  • 为了避免任何锁定,我避免了任何互斥并仅基于原子操作对所有相关结构进行了编码。它基本上是一个无锁的FIFO。
  • 我尝试通过在所有分配的内存上使用mlock来避免页面错误。
  • 我通过thread_policy_set(类似于here)将线程设置为实时约束。

  • 有时仍然会发生下溢。我想知道如何调试它,因为我想知道是什么导致了它们。
  • 我正在考虑一种可能的方法,如果它花费的时间超过2毫秒左右,则可以跟踪音频回调的当前执行。但是我该怎么办呢?
  • 另外,也许它仍然读取一些内存,这会导致页面错误。我该如何调试呢?
  • 回调中的所有代码仍然有些复杂。也许太复杂了。我可以通过引入另一个间接方法来解决此问题,并仅使用简单的环形缓冲区使代码真正最少。那会带来更多的延迟,我不确定这是否真的是问题所在。
  • 最佳答案

    我要尝试的是,如果我要在不到2ms的时间内完成一个过程,则在进入该过程时将设置一个2ms的闹钟中断,并在退出该过程时将其清除。
    即使加类很少发生,也一定可以解决。

    因此,当发生中断时,我可以在调试器中捕获它并检查堆栈。
    这是否会花费额外的时间进行操作?
    也许(也许不是),但多次这样做必定会揭示出一些有趣的东西。

    我要做的另一件事就是简单地在回调本身中寻找加速。
    为此,我会在它运行时手动将其随机多次暂停,并每次检查堆栈。
    我只会忽略回调不在堆栈上的所有示例。
    对于其余示例,回调位于堆栈中,它将在回调的状态序列中处于随机位置,因此,如果有任何事情正在做,其优化将节省大量时间,那么我将看到它在做它。

    关于c++ - 如何配置音频回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21376695/

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