我使用 socat 创建虚拟串口:
$socat -d -d pty,raw,echo=0 pty,raw,echo=0
然后通过我的程序打开它并通过 Ctrl+c 停止程序,再次运行后让我收到这条消息:
“无法打开端口 pts/9,错误:设备或资源繁忙”
#include "serport.h"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPort serialPort;
serialPort.setPortName("/dev/pts/9");
serialPort.setBaudRate(QSerialPort::Baud9600);
if (!serialPort.open(QIODevice::ReadOnly)) {
qDebug() << QObject::tr("Failed to open port %1, error: %2").arg(serialPort.portName()).arg(serialPort.errorString()) << endl;
return 1;
}
serport port(&serialPort,&a);
a.connect(&a, SIGNAL(aboutToQuit()), &serialPort, SLOT(deleteLater()));
a.connect(&a, SIGNAL(aboutToQuit()), &port, SLOT(deleteLater()));
return a.exec();
}
服务端口
#ifndef SERPORT_H
#define SERPORT_H
#include <QDebug>
#include <QObject>
#include <QtSerialPort/QSerialPort>
class serport : public QObject
{
Q_OBJECT
public:
explicit serport(QSerialPort *serialPort, QObject *parent);
~serport();
QSerialPort *port;
signals:
public slots:
};
#endif // SERPORT_H
服务端.cpp
#include "serport.h"
serport::serport(QSerialPort *serialPort, QObject *parent) : QObject(parent),port(serialPort){ }
serport::~serport(){
qDebug()<<"closing";
port->close();
}
如何正确关闭端口?为什么在我的程序中从来没有看到“关闭”消息?
最佳答案
这是关于在不调用所有释放处理程序的情况下退出进程。更多的是特定于 Linux 而不是 Qt。但是你仍然可以做点什么。确保使用 Qt 为 Ctrl-c 创建用户处理程序。
关于linux - 为什么不在析构函数中关闭串口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668210/