[英]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.