Реализация таймера C ++

Я пытаюсь реализовать функцию «таймера» в C ++ для программы, чтобы сделать что-то через несколько секунд.
Однако у меня неожиданные результаты.

short e, sum;
clock_t start;
double duration=0;

for (e=0; e<4; e++) {
start = clock();
while (duration < 1) {

duration = (clock() - start)/(double)CLOCKS_PER_SEC;
}
cout << duration;
duration = 0;
sum += e;
/* Calculate EPOCH error */
cout << e;
}
cout << "\n" << e<< "\n";

Результаты, которые я ожидаю:

  • консольный вывод каждую секунду, за которым следует e (0,1,2,3)
  • в конце выполнения я ожидаю, что сумма будет 0 + 1 + 2 + 3 = 6,

Полученные результаты:

  • консольный вывод, за которым следует e, все вместе, когда выполнение завершится
  • сумма = 6

Что я нахожу сомнительным, так это то, почему программа печатает на консоль, пока не завершится выполнение, а не каждую секунду, как ожидалось?

Ура,

1

Решение

Ваша проблема в том, что выходной поток не очищается во время цикла. На самом деле, написание кусков текста на консоль довольно дорого. Поэтому ввод буферизуется и записывается на консоль только при сбросе. Промывка потока может быть выполнена потоковым std::flush:

    cout << e<<std::flush;

std::endl будет также очищать поток в дополнение к добавлению новой строки (написание \n может быть также сделайте это, но это не гарантировано).

Как примечание: вы можете подумать о добавлении каких-либо разделителей между вашими числами, чтобы сделать вывод читабельным.

1

Другие решения

Других решений пока нет …