c++ - 从另一个线程关闭和打开 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的源代码
解决方案
编译器可能会优化布尔变量访问。但无论如何,这看起来不太适合您的用例。
由于您有两个应用程序试图同时访问相同的硬件,因此您应该拥有某种“多路复用器”,您可以将两个应用程序连接到以共享串行端口的使用。
顺便说一句,为什么你有多个应用程序试图同时访问同一个串行端口?
推荐阅读
- sql - 如何在 SQL Server 中检查调用存储过程
- delphi - Delphi StringGrid 以不需要的列间距显示
- mysql - MariaDB最新10.5版本无法更改root密码,没有skip-grant-tables无法使用
- python - 如何使用碰撞矩形或其他东西从鼠标坐标中获取对象(或它在 NumPy 数组中的索引)?(Pygame 2D)
- php - 如何在 php 中读取 html 元素的类名?
- react-native - 如何正确调用此自定义钩子,并避免无限重新渲染?
- python - 如何在深度图上进行彩色图像分割并创建一个代表结果的 9 个索引数组?
- javascript - 水平导航栏中下拉菜单的定位相关问题
- mysql - 聚合 FileSize 数据信息
- angular - 在 Angular 9 中将 # 添加到浏览器地址的末尾