gpt4 book ai didi

linux - 为什么不在析构函数中关闭串口?

转载 作者:可可西里 更新时间:2023-11-01 11:48:52 28 4
gpt4 key购买 nike

我使用 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 创建用户处理程序。

QApplication: How to shutdown gracefully on Ctrl-C

关于linux - 为什么不在析构函数中关闭串口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668210/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com