увеличить последовательный порт asio - async_read_some не читает данные - PullRequest
0 голосов
/ 29 сентября 2018

Я создал простой класс, который читает последовательный порт:

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 Что не так?

...