Я создал простой класс, который читает последовательный порт:
class SerialPort
{
public:
SerialPort(const std::string& port): serialPort_(io_service_, port){}
void ReadAsync()
{
serialPort_.async_read_some(boost::asio::buffer(buffer_),
boost::bind(&SerialPort::ReadComplete,
this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
thread_ = boost::thread(boost::bind(&boost::asio::io_service::run, &io_service_));
}
void ReadComplete(const boost::system::error_code& error, size_t bytesTransferred)
{
std::cout << "Bytes transferred: " << bytesTransferred << std::endl;
buffer_.clear();
ReadAsync();
}
void Read()
{
char c = '\0';
boost::asio::read(serialPort_, boost::asio::buffer(&c, 1));
std::cout << c << std::endl;
}
private:
boost::asio::io_service io_service_;
boost::asio::serial_port serialPort_;
boost::thread thread_;
std::vector<std::uint8_t> buffer_;
};
Метод чтения работает нормально, но когда я использую ReadAsync, ReadComplete всегда вызывается с bytesTransferred == 0 Что не так?