Почему этот выход чего-то ждет? - PullRequest
0 голосов
/ 09 ноября 2010
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 ]

4 голосов
/ 09 ноября 2010

1001 * попробовать *

cout.flush();

до вашего ожидания

4 голосов
/ 09 ноября 2010

Это может быть из-за буферизации ввода / вывода. Вы должны очистить буфер вывода (либо попробуйте << endl вместо '\n', либо запишите cout.flush) вручную.

2 голосов
/ 09 ноября 2010

flush () / std :: endl уже упоминался - но действительно ли вы намерены потреблять 100% одного ядра, пока вы ждете? Это то, что делает цикл while()! Если вы хотите более хороший подход к «ожиданию», подумайте об одном из следующих:

  1. boost :: thread :: sleep () - степень детализации в миллисекундах
  2. тревоги (1 секунда детализации)
  3. выберите ()
  4. pthread_cond_timedwait ()

и т.д.

2 голосов
/ 09 ноября 2010

Попробуйте cout << "This is" << endl;

Это похоже на буферизацию, а не проблему с часами.

...