C ++的循环速度太慢

问题描述 投票:0回答:1

我正在尝试使用PortAudio制作音频应用程序。我的回调函数非常慢,并且一直在创建不断的取消运行。我一步一步地删除了回调中的所有内容,直到发现问题:for循环。我删除了所有内容,以便在回调函数中唯一发生的事情是for循环,它仍然导致欠载。我知道这是for循环,因为当我减少迭代次数时,欠载就消失了。

static int patestCallback(const void *inputBuffer, void *outputBuffer,
                      unsigned long framesPerBuffer,
                      const PaStreamCallbackTimeInfo *timeInfo,
                      PaStreamCallbackFlags statusFlags, void *userData)
{
    int x = 0;
    for (int jj = 0; jj < 10000; jj++)
    {
        x++; // for testing, not actually used
    };
    return paContinue;
}

这是我的完整测试代码:https://gist.github.com/johnroper100/b87641f5609dbb49bc3c1121b1f4daf1

这个问题确实没有必要,但是我在python等效项(声音设备)中执行了相同的回调,并且没有问题。

c++ callback portaudio
1个回答
0
投票

一个没有任何内容的for循环对于您的CPU来说仍然是艰苦的工作。

如果您不希望CPU将所有功能都花在该for循环上,则至少应使该for循环包含放弃CPU周期的内容。

最简单的方法是在其中发出对sleep()或nanosleep()的调用。

更高级的方法是使用具有适当机制的线程,使它们等待所需的操作。

© www.soinside.com 2019 - 2024. All rights reserved.