C++ 无法使用boost asio关闭串行端口
我有一个问题,似乎有人遇到过,但似乎没有被问到这里。我有一个非常简单的应用程序,它现在只是使用boost asio打开和关闭一个串行端口(只是在构建更大的应用程序之前尝试进行一些简单的调试。调用驻留在基于qt的gui中。现在的串行通信是在窗口构造函数中设置的: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);
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;
}