• 2268阅读
  • 1回复

[提问]有关多线程的问题 [复制链接]

上一主题 下一主题
离线天天up
 

只看楼主 倒序阅读 楼主  发表于: 2020-07-21
刚学QT,想做一个串口助手。看到了QT的多线程部分,于是想把UI显示和串口的IO操作放在两个线程里面。计划是主界面发送各种信号对串口类进行各种操作。
看了多线程的实现,一般有两种实现,这里我用的是moveToThread(),具体实现是,主界面类中有MySerial类指针(MySerial继承自QSerialPort),
在界面类中的构造方法中新建一个QThread,然后用moveToThread() 把MySerial 放在该线程中。按我的想法,串口线程只在需要的时候才运行(运行条件有几种,比如,串口类发现接收到新数据,或者界面类要求发送数据,或者界面类要求打开串口/关闭串口,更改串口设置。)现在有些地方不太明白主要是以下几点:
1.界面类发送信号,串口类若在休眠中,会执行相应的槽函数吗(或者说怎么唤醒休眠的串口线程,发信号能唤醒吗)?
2.怎样让串口线程执行完界面线程发送的信号之后就进入阻塞状态。因为不是继承QThread,所以也就没法重写run(),也就不能用QMutex之类的同步机制
3.串口类的在调用moveToThread() 之后,目标线程类会成为其父对象吗?关闭整个软件的时候,怎样安全地结束所有线程?
大家知道怎么处理吗?
PS:我也试过用同时继承QThread和MyThread类,重写run(),使用QWaitCondition 然后在再实现多线程,但是这样会报错(QT中继承多个QObject子类会出错)。
离线akecbz

只看该作者 1楼 发表于: 2020-07-21
使用信号new QSerialPort(),这样就可以了。不在构造函数中做初始化。
快速回复
限100 字节
 
上一个 下一个