1

なぜstream.flush();うまくいかないのですか?

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 サーバーに接続させると、すべて正常に動作します。問題は、クライアントとサーバーの両方が同じプロセスにあることだと思います(1つはサーバーとして機能し、もう1つはクライアントとして機能する2つの脅威を作成します)。それらを別々のプロセスに入れるとすべて正常に動作しますが、両方が同じプロセスにあると、スリープが呼び出されるまで転送が停止します... (これはテスト上の理由のみであり、後で両方が異なるサーバーで実行されます)。

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

なぜこれが起こっているのですか?

4

1 に答える 1

0

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

他のホストの受信者で同じコードを試して確認してください。

更新: 問題は空の while(true); だと思います。私は次のようなものを使用します:

while(true) {
    sleep(1);
}

または nanosleep 両方ともヘッダー ctime で定義されています。最後に、同じプロセスでサーバーとクライアントを実行すると、より多くの問題が発生すると思います。

/トバイアス

于 2009-08-27T14:51:47.183 に答える