3

特定のパケット/秒間隔でパケットを生成するソースからのパケットをシミュレートしています。ostreamオブジェクトのように動作するストリーム クラスを作成し、operator<<それを介して出力するために使用できるようにしたいと考えていますが、挿入された各値は指定された間隔で順番にバッファからファイル記述子に解放される必要があることに注意してください。

したがって、たとえば、ファイル記述子を持つソケットがあり、次のようにsockfd言うことができます。

MyBuffer buffer(sockfd, 1000); //Interval of 1000 milliseconds
buffer << 1 << 2 << 3;

出力は、出力するようにタイミングが調整されます

1
<1 second gap>
2
<1 second gap>
3

ソケットに。私は今 Boost.Iostreams を見ていますが、それは良い解決策でしょうか? 私が認識していないこの問題を説明する、グーグルで検索できる魔法のフレーズはありますか?

どんな助けでも大歓迎です。

ありがとうブラッド

4

2 に答える 2

2

カスタム ストリーム クラスの構築とは完全に直交する、これを行うための 1 つのオプションは、スレッドによって毎秒ポーリングされる文字列のキューを維持することです。キューがポーリングされるたびに、スレッドは最初の要素を読み取り、それをネットワーク経由で送信します。

これはストリームライブラリを使用していませんが、それがあなたが望むものかもしれないと思います. 内部的には、ほとんどのストリームは、取得したすべての入力を大量のテキストにまとめるだけで、挿入した各オブジェクトに対応するテキストの部分に関する情報が失われます。

編集: 最初にこれについて言及する必要がありましたが、このキューで適切な同期を使用するようにしてください! おそらく、ミューテックスを使用してアクセスを保護するか、それが機能しない場合は巧妙なロックフリー キューを使用することをお勧めします。複数のスレッドからやみくもに読み書きしないように注意してください。

于 2011-02-17T21:34:11.403 に答える
2

1000 ミリ秒は非同期にする必要がありますか? そうでない場合は、ストリームの operator<< に Sleep(1000) を入れることができます。あなたがしようとしていることに応じて、それはあなたに合うかもしれません。

于 2011-02-17T21:51:09.327 に答える