0

無限ループで読み取る同期サーバーとクライアントを使用しています。

for (;;){
  boost::system::error_code error;
  read(socket,boost::asio::buffer(&abc, sizeof(abc)));
...
}

非同期ではなくsnychを使用したいので、残りのプログラムのブロックを解決する最良の方法は何ですか. (スレッド?)

thx事前に..

4

1 に答える 1

1

メインスレッドの受信トレイとして機能するスレッドセーフキューを使用して、接続ごとのスレッドにします。複数の接続には対応していませんが、スケーラビリティが必要ない場合は、最も安全で簡単な方法です。書き込みは、メイン スレッドによってソケットに直接行われます。読み取りは専用スレッドによって行われ、メッセージ全体を受信するまで一時バッファーに読み取りデータ ビットを蓄積してから、メッセージ全体をメイン スレッドの受信トレイ キューに転送します。多くの接続を提供する必要がある場合、またはリソースが限られている場合は、select()/epoll() ベースのイベント ループ (リアクター) で非ブロッキング IO を使用する必要があります。

于 2012-11-14T07:47:53.550 に答える