如果std :: cout被评论,计时器需要更长时间才能达到10.f秒

时间:2016-12-13 15:34:57

标签: c++ multithreading timer conditional-statements

我的类Timer(使用std::chrono)返回的值有一个奇怪的问题。

如果我保留std::cout评论,我认为delta返回timer.restart()的价值非常低(达到 10需要3到4倍的时间) .F )。我尝试显示它,但正如我上面所述,取消注释std::cout解决了问题。

我的计时器在应用程序的其他部分工作得很好,所以我认为问题不存在。

void Party::gameOver(float delta)
{
    _delta += delta;
    // std::cout << _delta << std::endl; // if I uncomment this the problem is solved
    if (_delta > 10.0000f) {
        // ...
        _state = GameStatusType::Waiting;
        _delta = 0;
    }
}

此方法在此处调用:

void Party::loop(void)
{
    Timer timer;

    while (!isFinished())
    {
        float delta = timer.restart(); // return in second

        switch (_state)
        {
        // ...
        case GameStatusType::GameOver:
            gameOver(delta);
            break;
        }
    }
}

方法“loop”在如下的线程中调用:

void Party::run(void)
{
    _party = std::thread(&Party::loop, shared_from_this());
}

我不知道这是否有帮助,但我在Windows 10上的Visual Studio 2015上执行此代码。如果您需要更多信息,请询问。

2 个答案:

答案 0 :(得分:0)

一种可能性是Windows控制台真的很慢,有很多话题。您可以尝试使用重叠的io写入控制台,看看它是否有所改进。

答案 1 :(得分:0)

问题只是循环太快了。刚加了一个睡眠。