为什么这个输出在等待之后呢?

时间:2010-11-09 18:48:34

标签: c++ delay wait clock cout

void Wait(double Duration)
{
    clock_t End;
    End = clock() + (Duration*CLOCKS_PER_SEC);

    while (clock() < End)
    {
        // This loop just stalls the program.
    }
}

我的功能在一半时间内完美运行,但偶尔会在程序被调用之前停止运行。例如,请使用以下代码段:

cout << "This is\n";
Wait(2.5)
cout << "a test!";

你希望第一行立即显示,第二行在2.5秒后出现,但有时候所有在2.5秒后出现。这是什么交易?

4 个答案:

答案 0 :(得分:4)

cout.flush();
在等待之前

答案 1 :(得分:4)

这可能是因为I / O缓冲。 您应该手动刷新输出缓冲区(尝试<< endl而不是'\n'或写cout.flush)。

答案 2 :(得分:2)

尝试cout << "This is" << endl;

它看起来像一个缓冲,而不是时钟问题。

答案 3 :(得分:2)

已经提到了flush()/ std :: endl - 但你是否打算在等待的时候真正消耗100%的一个核心?这就是while()循环正在做的事情!如果您想要更好的“等待”方法,请考虑以下其中一项:

  1. boost :: thread :: sleep() - 毫秒粒度
  2. 警报(1秒粒度)
  3. select()的
  4. 那么pthread_cond_timedwait()