Compartir vía


Efectos del almacenamiento en búfer

En el ejemplo siguiente se muestran los efectos del almacenamiento en búfer. Se podría esperar que el programa imprima please wait, esperar 5 segundos y continuar. Pero no funcionará necesariamente de esta manera, porque la salida está almacenada en búfer.

// 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 que el programa funcione lógicamente, el objeto cout debe vaciarse de forma automática cuando se muestre el mensaje. Para vaciar un objeto ostream , hay que enviarle el manipulador flush :

cout <<"Please wait..." <<flush;

En este paso se vacía el búfer, lo que garantiza que el mensaje se imprima antes de la espera. También se puede usar el manipulador endl, que vacía el búfer y genera un salto de línea de retorno de carro o se puede usar el objeto cin. Este objeto (junto con los objetos cerr o clog ) suele estar vinculado al objeto cout . Por tanto, cualquier uso de cin (o de los objetos cerr o clog ) vacía el objeto cout .

Consulte también

Flujos de salida