2011-07-27 7 views
0

私は自分のオペレーティングシステムの割り当てに取り組んでいます。私は、スレッド、セマフォ、イベントなどで基本的なことをすることができるマイクロカーネルを書く必要があります。 BCC 3.1が私のシステム環境を模倣しています。古典的なデバッグは実際には使用されません。私はcoutスタイルでデバッグしています。 問題はcoutの変な動作です。ブロックや何かに書き出します。もし私が40拍子のようにすると、すべてが書き出されます。もし私が39人をしたら、彼らのどれも書いていません。それに対して、私が40と79の叫びの間にすれば、それはまだ最初の40文字しか書いていませんが、もし80文字をすれば、すべてOKです。数字は正確ではありません。しかし、私はまた、弦の長さを変えると同じように効果があることに気付きました。私はどれくらいの文字が1つの叫び声に等しいか分かりません。 追加情報は要求に応じて入手可能です。ありがとうございました。C++マイクロカーネルの問題

+1

「cout」がバッファされる。必要に応じて 'flush()'するか、フラッシュする 'endl'を追加するか、バッファされない' cerr'に書き出します。 –

+0

cerrが機能しません。 flush(cout)は効果がありません。 私は、cerrは書き出しますが、似たように書いています。 – maricn

+0

あなたの環境もおそらくバッファリングされています。 Btw。私はあなたが 'std :: cout.flush()'を意味し、 'flush(std :: cout)'ではないと思いますか? – Nobody

答えて

1

実際に関係なくバッファリングのように聞こえますが、std::coutは出力をバッファしません。

:どのような場合には、あなたは

バッファリングを無効にすることによって

std::cout.flush();

または

std::cout << std::flush;

または

std::cout << std::endl;

かさえによってcoutをフラッシュしてみてください

std::cout.rdbuf()->pubsetbuf(0, 0);

+0

フラッシングから全く影響がありません... 最後の行を試しましたが、コンパイルエラーが発生しました: pubsetbufはstreambufのメンバーではありません。 – maricn

+0

cout.setf(ios :: unitbuf);どちらも動作していません... – maricn

+0

pubsetbufの代わりに、setbufも呼び出し可能ですが、効果はありません... – maricn