Ok, это просто из любопытства, но почему функция сна не работает в цикле, или как я могу получить его на работу в цикле?C++, сон, и петли
for(int i = 0; i < 5; i++) {
cout << i << endl;
sleep(2);
}
Ok, это просто из любопытства, но почему функция сна не работает в цикле, или как я могу получить его на работу в цикле?C++, сон, и петли
for(int i = 0; i < 5; i++) {
cout << i << endl;
sleep(2);
}
cout
в буфер, то есть его содержание не всегда выводится на консоль сразу. Попробуйте добавить cout.flush()
прямо сейчас sleep(2);
ahhh, interesting. –
<< endl фактически очищает поток. Он имеет тот же эффект, что и << << \ n "<< flush. –
Или вы можете использовать std :: ends, чтобы сделать то же самое без новой строки. – Konrad
Если это не работает для вас, вы можете попробовать этот код:
#include <iostream>
#include <windows.h>
...
for(int i = 0; i < 5; i++) {
cout << i << endl;
Sleep(2000);
}
С учетом тега linux на вопрос, я бы предположил, что включение
По моему скромному мнению, эта программа должна работать правильно. Может быть, ваш std :: cout перенаправляется где-то еще? Вы не вызываете правильную функцию sleep() (но без заголовка)? Или другая проблема? Но это должно сработать.
Вы пробовали разворачивая цикл, чтобы увидеть, если это ведет себя точно так же?
cout << 1 << endl;
sleep(2);
cout << 2 << endl;
sleep(2);
// Etc.
Предполагая, что ведет себя точно так же, несмотря на то, станд :: епсИ должен очистить буфер, он действительно похож dave.kilian имеет правильную идею, что соиЬ не не получает покраснел до программы (предположительно) заканчивается.
В этом случае, попытайтесь делать зЬй :: вровень и посмотреть, если это помогает - это возможно у вас есть ошибка (пропущенная функция?) В вашей стандартной библиотеке.
Другое дело, чтобы попытаться это перенаправить вывод в файл во время его просмотра с tail -f
в другом окне. Посмотрите, происходит ли такая же задержка при перенаправлении.
Наконец попробовать играть с уровнем оптимизации компилятора и посмотреть, если это изменяет результаты.
Try Sleep() вместо сна()
Дэйв уже дал вам ответ, поэтому я не буду касаться этого. Однако, если он используется исключительно для отладки или кода прототипа, вы также можете передать вывод в sdling std :: cout, std :: cerr, который небуферизирован для начала. Это означает, что вам не нужно явно вызывать flush, и вам не нужно добавлять endl к вашему выводу.
Ummm ... что заставляет вас думать, что он не работает? –
возможно, его «сохранение» этих снов, и, приведенный выше пример, распечатает 0 1 2 3 4 через 10 секунд? ЕСЛИ это так, как мне этого избежать? –
Похоже, он должен работать на меня ... Если, конечно, сон не является стандартной функцией, и вы написали свои собственные. –