首页 > 解决方案 > 从另一个线程关闭和打开 QSerialPort

问题描述

我正在开发一个需要与串行端口通信的应用程序。我正在使用QT 提供的阻塞材料示例。

问题是,我需要能够关闭和打开端口,因为我有另一个程序有时需要连接到同一个串行端口。

在该示例中,线程将始终保持串行端口打开。我尝试添加一个 bool 作为成员变量和一对公共函数以使其停止和启动..但它不起作用......

我认为问题是当我从我的 GUI 线程调用“MasterThread”的公共函数时,变量没有得到更新。

“MasterTrhead”类有一个布尔“m_quit”......但它没有一个如何使用它的例子......

这是我所做的更改:

我将这两个函数添加到类的主体中:

void MasterThread::stopCommunication()
{
    mFreeThePort = true;
}

void MasterThread::resumeCommunication()
{
    mFreeThePort = false;
}

然后在覆盖的“run()”函数中,我有:

while (!m_quit) {

    if(mFreeThePort) {
        serial.close();
        QThread::msleep(5);
        continue;
    }

所以我只添加了mFreeThePort布尔值和两个函数来设置它的真假...

但它永远不会关闭串口......我猜是因为while循环。

您可以在此处找到HEADER的原始示例的源代码,在此处找到BODY的源代码

标签: c++multithreadingqtqthreadqtserialport

解决方案


编译器可能会优化布尔变量访问。但无论如何,这看起来不太适合您的用例。

由于您有两个应用程序试图同时访问相同的硬件,因此您应该拥有某种“多路复用器”,您可以将两个应用程序连接到以共享串行端口的使用。

顺便说一句,为什么你有多个应用程序试图同时访问同一个串行端口?


推荐阅读