2013-01-07 95 views
3

异步操作。增强asio缓冲区懒惰分配

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

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

是否有可能让懒惰的分配,这和其他的电话?

+2

你们为何_lazy allocation_意味着:可以与第三方库集成,使用共享内存池等。Boost.Asio的documentation提供了一些信息和下面的示例代码是有用的? –

回答

8

懒惰分配或allocating when the resource is needed可以使用boost::asio::null_buffers来完成。可以使用null_buffers在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)); 
    } 
} 
+0

我知道我应该阅读文档没有跳过=) –

+0

很好的答案 - 我可以自己使用这个:) – Caribou

+0

这个答案真的很有帮助。谢谢。 –