2009-08-27 15 views
0

stream.flush();はなぜ機能しませんか?Boost.Asio iostream flush not working?

boost::asio::ip::tcp::iostream stream("localhost","5000"); 
assert(stream.good()); 
stream << 1; 
stream.flush(); 
while(true); 

それはループが削除された場合のみ、フラッシュだとライン
boost::this_thread::sleep(boost::posix_time::seconds(1));
は(かなり後に)実行されます。

おかげ

アップデート: 私はいくつかのより多くのデバッグを行なったし、問題は実際にはないフラッシュコマンドです。私のコードをnetcatサーバーに接続させると、すべて正常に動作します。問題は、クライアントとサーバーの両方が同じプロセスにあることです(2つの脅威を作成し、クライアントとしてサーバーとして動作させる)。私はそれらを別々のプロセスに置くとすべて正常に動作しますが、両方が同じプロセスにあると、スリープが呼び出されるまで転送が停止します(これはテストの理由だけであり、後で両方が別のサーバーで実行されます)。

プラットフォームはWindowsXPです。

これは何が起こっているのですか?

答えて

1

flushが機能しないことをどのように知っていますか? あなたのwhile(真)があなたのシステムに非常に高い負荷をかけていると思われます。 これにより、受信者が実行されないようにすることができます。

他のホストの受信者と同じコードをチェックしてください。

更新: 私は問題が空(真)であると思います。ヘッダのctimeで定義された

while(true) { 
    sleep(1); 
} 

かにnanosleep両方: 私のようなものを使用します。 最後に、私は同じ プロセスでサーバーとクライアントを実行していると問題が増えると思います。

/tobias