关闭正在运行的QSerialPort的电源是否有问题?

时间:2018-09-22 13:32:44

标签: windows qt asynchronous segmentation-fault serial-port

我正在开发带有多个串行端口的应用程序。这些端口中的每个端口均由不同的线程处理,并具有自己的QSerialPort对象。从硬件的角度来看,它们是分层连接的,这意味着有一个主设备通过usb电缆(1个COM端口)连接到PC,与此主设备连接的还有其他几个设备,每个设备都有自己的设备。 COM端口。主机可以打开/关闭这些子端口的电源。

在应用程序中,端口是异步处理的。每个设备对象都在自己的循环中运行。如果其端口已打开,它将读取传入的数据。如果端口关闭,它将尝试在每个循环中打开它,直到成功。每个QSerialPort对象都处理errorOccurred信号上的错误。如果它收到DeviceNotFoundErrorPermissionErrorResourceError错误,则说明该端口已关闭(如果已打开),并且如上所述继续循环。

问题是该应用程序的此串行通信部分崩溃(分段错误)。我花了几天时间找到问题,但到目前为止没有任何结果。为了更好地了解发生了什么,我想在这里问一下。如果QSerialPort在子端口打开且正在工作时,主设备关闭了子端口的电源,可能会成为问题吗?还是在打开/关闭子端口或对其执行任何其他操作时关闭电源? (我不想包含特定的可执行代码,因为它是更大的应用程序的一部分,并且很难从中生成和执行。如果可能,我想只讨论上面描述的概念。)

感谢您的帮助或想法!

更新

创建QSerialPort并将其放入另一个线程:

QThread *t = new QThread(this)
SomeObject *o = new SomeObject(this);

o->moveToThread(t);
t->start();

后来SomeObject

QSerialPort *port = new QSerialPort();

1 个答案:

答案 0 :(得分:0)

尝试在关闭电源之前销毁端口对象,并在打开电源后重新创建

QSerialPort *port = new QSerialPort();
//init and use
//....
delete port;
port = nullptr;
//turn the power off

//turn the power on
port = new QSerialPort();