gpt4 book ai didi

c++ - boost.asio.detail.read_op 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:41 31 4
gpt4 key购买 nike

我看了boost.1.50源码中的asio,方法是什么意思?

void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred, int start = 0)
{
switch (start)
{
case 1:
buffers_.prepare(this->check_for_completion(ec, total_transferred_));
for (;;)
{
stream_.async_read_some(buffers_,
BOOST_ASIO_MOVE_CAST(read_op)(*this));
return; default:
total_transferred_ += bytes_transferred;
buffers_.consume(bytes_transferred);
buffers_.prepare(this->check_for_completion(ec, total_transferred_));
if ((!ec && bytes_transferred == 0)
|| buffers_.begin() == buffers_.end())
break;
}

handler_(ec, static_cast<const std::size_t&>(total_transferred_));
}
}

代码取自 boost_1_50_0\boost\asio\impl\read.hpp。switch case 样式看起来很奇怪,"return;default:"???

最佳答案

这是一个管理复合读操作的仿函数。

第一次调用时 (start == 1),它准备缓冲区,发出第一次读取,将自己作为完成处理程序传递,然后返回。

现在,每次作为完成处理程序被调用时,它都会直接跳转到 default 标签并更新缓冲区和内部计数器,并在需要时发出另一次读取。

实际上,可以将此运算符拆分为 2 个独立的运算符:一个用于初始读取,另一个用于后续调用。但也许这样的做法会产生更多的代码,因此被图书馆作者拒绝。

关于c++ - boost.asio.detail.read_op 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237493/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com