Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用boost asio关闭串行端口_C++_Qt_Boost_Serial Port - Fatal编程技术网

C++ 无法使用boost asio关闭串行端口

C++ 无法使用boost asio关闭串行端口,c++,qt,boost,serial-port,C++,Qt,Boost,Serial Port,我有一个问题,似乎有人遇到过,但似乎没有被问到这里。我有一个非常简单的应用程序,它现在只是使用boost asio打开和关闭一个串行端口(只是在构建更大的应用程序之前尝试进行一些简单的调试。调用驻留在基于qt的gui中。现在的串行通信是在窗口构造函数中设置的: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this);

我有一个问题,似乎有人遇到过,但似乎没有被问到这里。我有一个非常简单的应用程序,它现在只是使用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();
}
当gui关闭时,会调用析构函数,但系统只是在端口关闭时挂起。它似乎卡在boost的
posix_mutex.hpp
lock
方法中

我看过另一篇关于这个()的帖子,但似乎没有答案。有人对此有什么想法吗


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

问题可能是(我对boost::asio很陌生)您的io_服务已经被破坏。尝试将其作为主窗口类的一员。

问题可能是(我对boost::asio很陌生)您的io_服务已经被破坏。请尝试将其作为MainWindow类的成员。

谢谢您的回答-您可以对此进行扩展吗?为什么它已经被破坏?因为它被共享的\u ptr引用,我希望该服务在删除ui之前不会被破坏。服务[boost::asio::io_service io;]是在堆栈上创建的,将在主窗口构造函数完成时销毁。此外,Qt有自己的QSerialPort类,您不使用该类的原因是什么?谢谢回答-您可以对此进行扩展吗?为什么它已经被销毁?因为它被共享的\u ptr引用,所以我希望该服务在删除ui后。服务[boost::asio::io_service io;]在堆栈上创建,并将在主窗口构造函数完成时销毁。此外,Qt有自己的QSerialPort类,您为什么不使用它?
MainWindow::~MainWindow()
{
    if (port->is_open()) port->close();
    delete ui;

}