Эффекты буферизации
В следующем примере демонстрируются эффекты буферизации. Вы могли ожидать, что программа выведет please wait
, подождет 5 секунд и затем продолжит выполнение. Однако такое поведение необязательно, так как выходные данные помещаются в буфер.
// effects_buffering.cpp
// compile with: /EHsc
#include <iostream>
#include <time.h>
using namespace std;
int main( )
{
time_t tm = time( NULL ) + 5;
cout << "Please wait...";
while ( time( NULL ) < tm )
;
cout << "\nAll done" << endl;
}
Чтобы программа работала логично, объект cout
должен опустошать себя перед выводом сообщения. Чтобы сохранить объект ostream
, отправьте ему манипулятор flush
:
cout <<"Please wait..." <<flush;
Это действие сохраняет буфер, гарантируя вывод сообщения до ожидания. Можно также использовать endl
манипулятор, который очищает буфер и выводит канал возвращаемой строки каретки или можно использовать cin
объект. Этот объект (с объектами cerr
или clog
) обычно привязывается к объекту cout
. Таким образом, любое использование cin
(или объектов cerr
или clog
) сохраняет объект cout
.