web-dev-qa-db-ja.com

c ++ force std :: cout flush(スクリーンに出力)

次のようなコードがあります。

_std::cout << "Beginning computations..."; // output 1
computations();
std::cout << " done!\n";                  // output 2
_

ただし、問題は、出力#1と出力#2が(実質的に)同時に表示されることが多いことです。つまり、多くの場合、出力#1はcomputations()が戻るまで画面に出力されません。出力#1の全体的な目的は、バックグラウンドで何かが行われていることを示すことであり(したがって、ユーザーの忍耐を促すため)、この問題は良くありません。

computations()呼び出しの前に_std::cout_バッファーを強制的に印刷する方法はありますか?あるいは、この問題を解決する標準出力に印刷する他の方法(_std::cout_以外のものを使用)がありますか?

31
synaptik

std::flush

std::cout << "Beginning computations..." << std::flush;

また、 std::endl は、改行を書き込んだ後もフラッシュします。

54

ジョセフ・マンスフィールドの答えに加えて、 std :: endl もフラッシュを行います(新しい行以外)。

出力シーケンスosにエンドライン文字を挿入し、os.put(os.widen( '\ n'))に続いてos.flush()を呼び出したかのようにフラッシュします。

5
user1810087