3

非同期操作。

次に、事前に割り当てられたバイトバッファを渡します。次に例を示します。

s.async_receive_from(
    boost::asio::buffer( preallocated_pointer, preallocated_size ),
    _remote_endpoint,
    boost::bind(...)
    );

この呼び出しや他の呼び出しに遅延割り当てを行うことは可能ですか?

4

1 に答える 1

9

遅延割り当て、またはリソースが必要なときの割り当ては、 を使用して実行できますboost::asio::null_buffersnull_buffersBoost.Asio 内でリアクター スタイルの操作を取得するために使用できます。これは、サードパーティ ライブラリとの統合、共有メモリ プールの使用などに役立ちます。Boost.Asio のドキュメントには、いくつかの情報と次のサンプル コードが記載されています。

ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(), read_handler);
...
void read_handler(boost::system::error_code ec)
{
  if (!ec)
  {
    std::vector<char> buf(socket.available());
    socket.read_some(buffer(buf));
  }
}
于 2013-01-08T01:41:25.353 に答える