2010-11-09 37 views
0
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秒后有时会出现所有。这是怎么回事?

+1

有几乎可以肯定是一个更好的方式做你真正想做的事情。让我们知道您的平台/编译器,我们可以给出更好的建议。 – 2010-11-09 18:50:59

+0

这只会发生在你身上吗?请记住它是缓冲的。所以如果你不冲洗,我想你可能会得到你所遇到的行为。 – Bart 2010-11-09 18:51:55

+0

我不确定这是否正确,但编译器是否有可能优化掉循环,因为它看起来没有做任何事情?看到这个问题:http://stackoverflow.com/questions/3592557/optimizing-away-a-while1-in-c0x – AshleysBrain 2010-11-09 18:57:42

回答

4

尝试

cout.flush(); 

你的等待

2

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

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

4

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

2

flush()/ std :: endl已经被提及 - 但是您打算在等待时真正消耗一个核心的100%吗?这就是while()循环所做的!如果你想有一个更好的方法来 “等待”,考虑下列之一:

  1. 的boost ::螺纹::睡眠() - 毫秒粒度
  2. 警报(1秒的粒度)
  3. 选择()
  4. 那么pthread_cond_timedwait()

相关问题