从另一个线程关闭和打开QSerialPort

时间:2018-11-10 23:27:54

标签: c++ multithreading qt qthread qtserialport

我正在处理需要与串行端口通信的应用程序。我使用的是阻塞性示例provided by QT

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

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

我认为问题是,当我从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 布尔值和两个将其设置为true或false的函数...

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

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

1 个答案:

答案 0 :(得分:0)

编译器可能会优化布尔变量访问。但是无论如何,这对于您的用例来说似乎并不正确。

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

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