2009-09-04 18 views
11

Wie können Sie ungepuffert Ausgabe von Cout bekommen, so dass es sofort auf die Konsole schreibt ohne die Notwendigkeit zu flush (ähnlich Cerr)?Unbuffered Ausgabe mit Cout

Ich dachte, es könnte durch rdbuf() -> Pubsetbuf getan werden, aber das scheint nicht zu funktionieren. Das folgende Code-Snippet soll sofort auf die Konsole ausgeben und dann ein paar Sekunden warten. Stattdessen wartet es nur und gibt nur aus, wenn das Programm beendet und der Puffer geleert wird.

#include <iostream> 

int main() 
{ 
     std::cout.rdbuf()->pubsetbuf(0, 0); 
     std::cout << "A"; 
     sleep(5); 
} 

Antwort

32
std::cout.setf(std::ios::unitbuf); 

sollte es tun.

+0

Diese Lösung funktionierte tatsächlich für mich, danke! Ein Hinweis für andere: Die Pufferung scheint bei Verwendung von cout oder printf zu geschehen und passiert auch dann, wenn am Ende der Zeile ein Zeilenumbruch verwendet wird. – Moot