Рассмотрим приведенный ниже код, в котором есть две тестовые области
В 1-м тесте (тест 1 :: без новой строки) запрограммировано спать в течение 10 секунд (5 * 2), как указано. Но все 5 * печатаются only after the 10 seconds finished.
Во втором тесте (тест 2 :: с новой строкой) запрограммированное время ожидания 10 секунд (5 * 2). Но # печатается после каждых двух секундного сна.
Какова логика этого?
Compiler:g++
platform:UNIX
Также,
Я изучал сон, не входит в стандартную библиотеку? нам нужно использовать pthread.h
Как тогда сон здесь работал для меня без включения pthread.h
#include<iostream>
int main()
{
using namespace std;
// Test 1 :: without new line
for(int i=0;i<5;i++)
{
sleep(2);
cout<<"*";
}
cout<<"\n";
// Test 2 :: with new line
for(int i=0;i<5;i++)
{
sleep(2);
cout<<"#\n";
}
return 0;
}
При подключении к терминалу std::cout
буферизируется по строке. Вам нужен явный cout << flush;
чтобы каждый *
отображался индивидуально.
Что касается вашего первого вопроса, cout не скрывается немедленно. Время, которое он делает, зависит от ряда факторов, но в этом случае он кажется, что он только промывается, когда он видит символ новой строки. Если вы хотите заставить флеш, вы можете использовать
cout << flush;
// or
cout.flush();
О pthreads: вероятно, ваш компилятор по умолчанию включает в себя необходимый заголовок.
std::cout
не сбрасывается немедленно (но может, если он видит символ'\n'
) ...sleep
находится вunistd.h
IIRC, который вполне может быть включен в<iostream>
вашей реализации.