3

异步操作。

现在我传递预分配的字节缓冲区,例如:

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

是否可以为此调用和其他调用进行延迟分配?

4

1 回答 1

9

延迟分配,或在需要资源时分配,可以使用boost::asio::null_buffers. null_buffers可用于在 Boost.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 回答