Поведение сна с и без символа новой строки

0

Рассмотрим приведенный ниже код, в котором есть две тестовые области

В 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;
 }
  • 4
    std::cout не сбрасывается немедленно (но может, если он видит символ '\n' ) ...
  • 0
    sleep находится в unistd.h IIRC, который вполне может быть включен в <iostream> вашей реализации.
Показать ещё 3 комментария
Теги:
sleep

2 ответа

4

При подключении к терминалу std::cout буферизируется по строке. Вам нужен явный cout << flush; чтобы каждый * отображался индивидуально.

1

Что касается вашего первого вопроса, cout не скрывается немедленно. Время, которое он делает, зависит от ряда факторов, но в этом случае он кажется, что он только промывается, когда он видит символ новой строки. Если вы хотите заставить флеш, вы можете использовать

cout << flush;
// or
cout.flush();

О pthreads: вероятно, ваш компилятор по умолчанию включает в себя необходимый заголовок.

  • 0
    Как это можно включить по умолчанию? Есть ли способ сделать это ... Возможно ли так
  • 1
    Есть ли способ сделать что?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню