Efeitos do armazenamento em buffer
O exemplo a seguir mostra os efeitos do buffer. Você pode esperar o programa imprimir please wait
, aguardar 5 segundos e, em seguida, continuar. No entanto, ele não necessariamente funcionará dessa forma porque a saída é armazenada em buffer.
// 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;
}
Para fazer com que o programa funcione logicamente, o objeto cout
deve se esvaziar quando a mensagem for exibida. Para liberar um objeto ostream
, envie-o ao manipulador flush
:
cout <<"Please wait..." <<flush;
Esta etapa libera o buffer, garantindo que a mensagem seja impressa antes da espera. Você também pode usar o manipulador endl
, que libera o buffer e gera um retorno de carro-avanço de linha ou você pode usar o objeto cin
. Esse objeto (com os objetos cerr
ou clog
) geralmente é vinculado ao objeto cout
. Assim, qualquer uso de cin
(ou dos objetos cerr
ou clog
) libera o objeto cout
.