【问题标题】:Boost ASIO and serial port async read [duplicate]Boost ASIO和串口异步读取[重复]
【发布时间】:2018-09-21 17:43:20
【问题描述】:

我正在尝试使用 Boost ASIO 进行串行端口异步读取,当我的程序运行时我必须不断地听,此外我还在听我在 Boost ASIO 中找到的multicast udp reciever 示例。我正在使用相同的 io_context 初始化 UDP 和串行接收器。当我尝试在我的控制台应用程序主程序中创建串行端口时,我可以从串行端口编译和读取,但只能编译一次。所以我想我应该把它变成一个单独的类,就像这个example 一样,也许可以使用一个单独的线程。但是,即使我使用与在主程序中尝试过的完全相同的语法,我也会遇到编译错误,该程序运行良好但只运行一次。当我不断(仍然是异步)从 udp 端口​​数据读取时,如何继续在串行端口上以异步方式侦听。请指教。

我试图四处寻找非官方的示例,但它们确实没有帮助,要么它们很差,要么过时,要么只是不必要地复杂。我正在尝试构建的东西要简单得多,就像这样

#pragma once
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <iostream>

class SerialComm
{
public:
    SerialComm(boost::asio::io_context& io_context, std::string& serial_port_name) :_serialport(io_context, serial_port_name)
    {
        start_receive();
    }

    ~SerialComm()
    {
    }

private:
    void start_receive()
    {
        _serialport.async_read_some(boost::asio::buffer(my_buffer, 1024),
            &SerialComm::handle_receive);
    }

    void handle_receive(const boost::system::error_code& error,
        std::size_t bytes_transferred)
    {
        if (!error)
        {
            std::cout << "Recieved:" << my_buffer << std::endl;
        }
    }

private:

    boost::asio::serial_port _serialport;
    unsigned char my_buffer[1024];
    //boost::asio::buffer<char, 1024> recv_buffer_;
};

这是我得到的错误:

1>c:\users\alam syed\documents\someproject\boost\include\boost-root\boost\asio\serial_port.hpp(746): 错误 C2338:未满足 ReadHandler 类型要求 1>c:\users\alam syed\documents\someproject\public\serialcomm.h(24):注意:见 引用函数模板实例化'void boost::asio::serial_port::async_read_some(const MutableBufferSequence &,ReadHandler &&)' 正在编译 1> 1> [ 1>
MutableBufferSequence=boost::asio::mutable_buffers_1, 1>
ReadHandler=void (__cdecl SerialComm::* )(const boost::system::error_code &,size_t) 1> ] 1>c:\users\alam syed\documents\someproject\boost\include\boost-root\boost\asio\use_future.hpp(138): 注意:参见类模板实例化的参考 'boost::asio::use_future_t>::std_allocator_void' 正在编译 1>c:\users\alam syed\documents\someproject\boost\include\boost-root\boost\asio\use_future.hpp(146): 注意:参见类模板实例化的参考 'boost::asio::use_future_t>' 正在编译

【问题讨论】:

    标签: c++ io serial-port boost-asio


    【解决方案1】:

    这个问题其实很容易解决。我把它留给像我这样的涉猎者。就用这个吧:

    _serialport.async_read_some(boost::asio::buffer(recv_buffer_),
                boost::bind(&SerialComm::handle_receive,
                    this, boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多