我正在处理需要与串行端口通信的应用程序。我使用的是阻塞性示例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循环。
答案 0 :(得分:0)
编译器可能会优化布尔变量访问。但是无论如何,这对于您的用例来说似乎并不正确。
由于您有两个应用程序试图同时访问同一硬件,因此您应该拥有某种“混合器”,可以将两个应用程序都连接到该“混合器”以共享串行端口的使用情况。
顺便问一下,为什么有多个应用程序试图同时访问同一串行端口?