SFML-睡眠计算

SFML - sleep calculation

本文关键字:计算 SFML-      更新时间:2023-10-16

我正在开发一个比较SFML和SDL的基准应用程序。我的基准测试之一是播放声音的速度。我在一个循环中多次播放声音,并计算所需的时间。我需要在播放声音之间延迟,因为我首先需要完成播放声音才能重新开始。我用SFML睡眠解决了这个问题,但我不确定我做得是否正确。可能不是因为第一次播放后,应用程序会冻结,就像它将处于无限循环中一样。如果音乐还在播放,我需要它延迟1毫秒。你能帮帮我吗?

我的功能:

void playSound()
{
    sound.setBuffer(buffer);
    sound.play();
}
void soundBenchmark(int numOfCycles)
{
    sf::Time delayTime = sf::milliseconds(0.01);
    sf::Clock clock;
    for(int i = 0; i < numOfCycles; i++)
    {
        playSound();
        while(sound.Playing) sf::sleep(delayTime);
    }
    sf::Time time = clock.getElapsedTime();
    cout << "Time required for " << numOfCycles << " cycles playing sound: " <<  time.asMilliseconds() << " milliseconds.n";
}

调用主函数:

while(running)
    {
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
            {
                window.close();
                running = false;
            }
        }
        soundBenchmark(20);
        break;
    }
    return 0;

我知道这是一个老问题,但只是为了指出代码中的错误:sf::milliseconds()函数的参数是以毫秒为单位的实际弹药数,作为十进制值。

因此,如果您希望它等待1ms,则应该输入sf::milliseconds(1)

这种行为在当前版本(截至今天的2.3)中是有效的,但我不知道在以前的版本中是否有所不同。