Účinky ukládání do vyrovnávací paměti
Následující příklad ukazuje účinky ukládání do vyrovnávací paměti. Můžete očekávat, že se program vytiskne please wait
, počká 5 sekund a pak bude pokračovat. Nebude to ale nutně fungovat tímto způsobem, protože výstup je uložen do vyrovnávací paměti.
// 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;
}
Aby program fungoval logicky, cout
musí se objekt při zobrazení zprávy vyprázdnit. Pokud chcete objekt ostream
vyprázdnit, odešlete ho manipulátoru flush
:
cout <<"Please wait..." <<flush;
Tento krok vyprázdní vyrovnávací paměť a zajistí, že se zpráva vytiskne před čekáním. Můžete také použít endl
manipulátor, který vyprázdní vyrovnávací paměť a výstupy kanálu návratového řádku řádku, nebo můžete použít cin
objekt. Tento objekt (s cerr
objekty clog
) je obvykle svázaný s objektem cout
. Jakékoli použití cin
(nebo cerr
clog
objektů) proto vyprázdní cout
objekt.