Effetti del buffering
L'esempio seguente illustra gli effetti della memorizzazione nel buffer. Il programma potrebbe visualizzare please wait
, attendere 5 secondi e quindi procedere. Potrebbe non verificarsi questa situazione, tuttavia, perché l'output viene memorizzato nel 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;
}
Affinché il programma funzioni in modo logico, l'oggetto cout
deve svuotarsi quando il messaggio viene visualizzato. Per scaricare un oggetto ostream
, inviarlo al manipolatore flush
:
cout <<"Please wait..." <<flush;
Questo passaggio scarica il buffer, garantendo che il messaggio venga visualizzato prima dell'attesa. È anche possibile usare il endl
manipolatore, che scarica il buffer e restituisce un feed di ritorno a capo oppure è possibile usare l'oggetto cin
. Questo oggetto (con l'oggetto cerr
o clog
) in genere è associato all'oggetto cout
. Quindi, qualsiasi uso di cin
(oppure dell'oggetto cerr
o clog
) scarica l'oggetto cout
.
Vedi anche
Output Streams (Flussi di output)