gpt4 book ai didi

c++ - boost streambuf 并编写奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 01:43:33 27 4
gpt4 key购买 nike

我正在使用streambuf作为串口通信的存储

io_service io;
serial_port sp(io);
sp.open("COM4");
sp.set_option( serial_port_base::baud_rate( 115200 ) );
sp.set_option( serial_port_base::character_size( 8 ) );
sp.set_option( serial_port_base::stop_bits( serial_port_base::stop_bits::one ) );
sp.set_option( serial_port_base::parity( serial_port_base::parity::none ) );
sp.set_option( serial_port_base::flow_control( serial_port_base::flow_control::none ) );
boost::asio::streambuf buffer;
// Fill buffer here
auto size = buffer.size();
std::cout << boost::format("Buffer size: %d") % size << std::endl;
boost::asio::write( sp, buffer );
size = buffer.size();
std::cout << boost::format("Buffer size: %d" ) % size << std::endl;

输出:

Buffer size: 8
Buffer size: 0

为什么方法 size() 返回不同的值?

最佳答案

boost::asio::write()操作消耗 streambuf 的输入序列,和 streambuf::size()返回输入序列的大小。

在这种特殊情况下,streambuf 的输入序列在 write() 操作之前包含 8 个字节。 write() 操作会阻塞,直到输入序列中的所有数据都已写入或直到发生错误。 write() 操作成功,consuming输入序列中的 8 个字节,并返回一个值以指示已传输 8 个字节。由于所有输入序列已被消耗,streambuf.size() 返回 0。

有关 streambuf 用法的更多信息,请考虑阅读 this回答。

关于c++ - boost streambuf 并编写奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488297/

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