Я пытаюсь реализовать функцию «таймера» в 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";
Результаты, которые я ожидаю:
Полученные результаты:
Что я нахожу сомнительным, так это то, почему программа печатает на консоль, пока не завершится выполнение, а не каждую секунду, как ожидалось?
Ура,
Ваша проблема в том, что выходной поток не очищается во время цикла. На самом деле, написание кусков текста на консоль довольно дорого. Поэтому ввод буферизуется и записывается на консоль только при сбросе. Промывка потока может быть выполнена потоковым std::flush
:
cout << e<<std::flush;
std::endl
будет также очищать поток в дополнение к добавлению новой строки (написание \n
может быть также сделайте это, но это не гарантировано).
Как примечание: вы можете подумать о добавлении каких-либо разделителей между вашими числами, чтобы сделать вывод читабельным.
Других решений пока нет …