Giriş
async_pipe nesnesi async_read() çağrısına geçilir. Genelde belli büüyklükte bellek alanı oluşturulur ve döngü ile okunur. Eğer döngü kurulmazsa bellek doluncaya ve EOF oluncaya kadar çağrı bekler. Çıktı bellek alanından büyükse ve döngü yoksa çalıştırdığımız uygulama takılabilir.
Örnek
Verinin tamamını okumak için şöyle yaparız.
Şöyle yaparız. Burada 8K'lık bellek ayrılıyor ve bir sefer okunuyor.
Şöyle yaparız. Burada 500 karakterlik bellek ayrılıyor ve döngü içinde okunuyor.
async_pipe nesnesi async_read() çağrısına geçilir. Genelde belli büüyklükte bellek alanı oluşturulur ve döngü ile okunur. Eğer döngü kurulmazsa bellek doluncaya ve EOF oluncaya kadar çağrı bekler. Çıktı bellek alanından büyükse ve döngü yoksa çalıştırdığımız uygulama takılabilir.
Örnek
Verinin tamamını okumak için şöyle yaparız.
boost::asio::streambuf recv_buffer;
boost::asio::async_read(out, recv_buffer,[&](error_code ec, size_t transferred) {
...
});
...
svc.run(); // Await all async operations
ÖrnekŞöyle yaparız. Burada 8K'lık bellek ayrılıyor ve bir sefer okunuyor.
std::vector<char> v;
std::error_code build_ec;
v.resize(1024 * 8);
boost::asio::async_read(out, boost::asio::buffer(v),
[&](const boost::system::error_code &ec, std::size_t size) {
...
});
ÖrnekŞöyle yaparız. Burada 500 karakterlik bellek ayrılıyor ve döngü içinde okunuyor.
using Loop = boost::function<void()>;
using Buffer = std::array<char, 500>;
Loop read_loop;
Buffer recv_buffer;
std::size_t total_received = 0;
read_loop = [&read_loop, &out, &recv_buffer, &total_received] {
out.async_read_some(boost::asio::buffer(recv_buffer),
[&](error_code ec, size_t transferred) {
total_received += transferred;
if (!ec)
read_loop(); // continue reading
});
};
Döngüyü bir kere başlatmak için şöyle yaparız.read_loop(); // async
Hiç yorum yok:
Yorum Gönder