繁体   English   中英

无法使用Boost Asio关闭串行端口

[英]Can not close serial port using boost asio

我有一个问题,似乎有人遇到了,但似乎在这里没有被问到。 我有一个非常简单的应用程序,现在只需使用boost asio打开和关闭串行端口即可(只是在构建大型应用程序之前尝试进行一些简单的调试。这些调用驻留在基于qt的gui中。串行通信现在是在窗口构造函数中设置:

 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(getData()));
    timer->start(1000);

    std::string comm = "/dev/ttyUSB0";

    boost::asio::io_service io;
    port = std::shared_ptr<boost::asio::serial_port>(new   boost::asio::serial_port(io, comm));
    std::cout << "Port has been successfully opened..." << std::endl;

    boost::asio::serial_port_base::baud_rate baud(19200);

    port->set_option(baud);
    std::cout << "Baud rate set to 19200..." << std::endl;



    getData();
}

getData将定期包含对串行端口的调用,但是现在它只是发出一个请求,以使用当前时间填充gui上的时间戳。

端口在析构函数中已关闭

MainWindow::~MainWindow()
{
    if (port->is_open()) port->close();
    delete ui;

}

关闭gui时,将调用析构函数,但系统仅在端口关闭时挂起。 似乎它被卡在boost的posix_mutex.hpp lock方法中。

我看过另一篇关于此的文章( https://cpc110.blogspot.com/2017/03/boost-asio-can-not-close-serial-port.html ),但似乎没有答案。 有人对此有任何想法吗?

我在Ubuntu 16.04 LTS上使用boost 1.58和Qt 5.8。

问题可能是(我本人对boost :: asio非常陌生)您的io_service已被破坏。 尝试使其成为MainWindow类的成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM