2013-01-07 2 views
3

Асинхронные операции.boost asio buffer lazy allocation

Теперь я перехожу предопределенный буфер байт, например:

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

Можно ли сделать ленивое выделение для этого и других вызовов?

+2

Почему вы подразумеваете под _lazy allocation_? –

ответ

8

Ленивое распределение, или allocating when the resource is needed, может быть выполнено с использованием boost::asio::null_buffers. null_buffers может использоваться для получения реакторных операций в Boost.Asio. Это может быть полезно для интеграции с сторонними библиотеками, использования общих пулов памяти и т.д. Boost.Asio documentation предоставляет некоторую информацию и следующий пример код:

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

этот ответ был действительно полезен. Спасибо. –

Смежные вопросы