2016-11-16 5 views
0

У меня действительно простая программа, которая печатает строки с использованием cout и снов после каждой строки. Все хорошо и полезно для примерно 7 итераций, поскольку буфер явно не сбрасывается в любой момент. После этого я предполагаю, что только часть буфера очищается на каждой итерации.Я не понимаю буферизованный вывод и cout

У меня есть несколько вопросов по поводу такого поведения:

  1. Если буфер достаточно, чтобы соответствовать ~ 7 строк вывода якобы большой, почему буфер продувают одну строку за один раз?
  2. Если этот буфер действительно покраснел таким образом, в чем преимущество этого? Почему не весь буфер сразу вспыхнул?
  3. Совместимо ли совпадение с тем же количеством символов на выходе, что и моя длина строки, или же внутренний буфер cout сбрасывается на основе разделителей конца строки, таких как '\ n'?

    int main(){ 
    
    for(int i = 0; i < 100; ++i){ 
    
    std::cout << "This is line " << i << '\n'; 
    Sleep(1000); 
    
    } 
    
    return 0; 
    } 
    
+0

Он печатает каждую секунду, как и вы ожидали, для меня, с или без '\ n'. –

ответ

0

Вы, кажется, предположить, что буфер не будет записано, пока он не заполнится. Вероятно, происходит то, что асинхронная запись начинается всего с одним выходным байтом. Пустое пространство буфера используется для приема символов, пока выполняется асинхронная запись. Когда текущая запись завершается, если/когда в буфере есть дополнительные символы, запускается новая асинхронная запись. Процесс должен был только блокировать запись, если буфер заполнен.

Смежные вопросы