Если вы работаете в Windows, быстрый способ сделать паузу - это позвонить system("pause");
Однако это не очень профессиональный способ выполнения действий.
Способ сделать паузу с пространством имен stdбыть примерно таким:
cout << "Press Enter to continue . . ." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Что касается вашего основного вопроса ... Если вы просто имеете дело с выводом текста пользователю, они не смогут заметить задержку в пять микросекунд.Однако они могут заметить, что длина вашего интервала колеблется на десятки миллисекунд.Вот почему sleep(..)
функции иногда терпят неудачу.
Давайте рассмотрим ваш пример вывода другого числа в последовательности Фибоначчи один раз в секунду.Это будет работать просто отлично:
#include <ctime>
#include <limits>
#include <iostream>
void pause() {
std::cout << "Press Enter to continue . . ." << std::endl;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
int main() {
clock_t next = clock();
int prev1, prev2, cur = 0;
for (int i = 0; i < 47; ++i) {
if (i < 2) cur = i;
else cur = prev1 + prev2;
prev2 = prev1;
prev1 = cur;
while (next > clock());
std::cout << (i+1) << ": " << cur << std::endl;
next += CLOCKS_PER_SEC;
}
pause();
return 0;
}
Следующее число в последовательности вычисляется и готово к печати до ожидания, поэтому время вычисления не добавит никакой задержки к выходу по времени.
Если вы хотите, чтобы ваша программа продолжала выводить данные с фиксированной скоростью, пока ваша программа работает в фоновом режиме, вам нужно просмотреть потоки .Вы можете добавить результаты в очередь в одном потоке, в то время как другой поток проверяет результаты печати один раз в секунду.