QT中线程新建方式的区别以及实际使用建议

QT多线程使用方式中常用的是
方式一:继承QThread,重写run函数,使用start函数开始;
方式二:继承QObject,新建QThread对象thread,使用QObject的moveToThread函数将QObject运行在thread中,使用start函数开始。
区别是什么?
跨线程使用信号槽时,根据线程使用方式和信号槽连接方式的不同,实际槽所运行的位置也不一样,结论如下:

使用方式一,实际此线程的槽函数根据连接时所选择的连接方式
1.QueueConnection方式 运行在创建此QThread派生对象的线程中
2.DirectConection方式 运行在触发信号的线程中

使用方式二,例如MoveToThread(A) ,实际此线程的槽函数根据连接时所选择的连接方式
1.QueueConnection方式 运行在A线程中
2.DirectConection方式 运行在触发信号的线程中

实际意义是什么?
1.当实际运行的目标槽函数是一个死循环时,无法使用方式二,因为这样会导致始终在槽中运行,无法接收其他信号,即事件循环失去响应。

2.当信号槽的实时性要求很高时,跨线程信号槽,且触发信号的线程和创建对象的线程为同一线程时无法使用方式一,这样会导致触发信号以后不会立即执行下一条语句,而会先执行槽。

3.当同时运行的线程数量比较多的时候,也不能使用方式一,这样会导致所有线程的槽函数都在一个线程中运行,继而发生信号无法及时响应的现象。

使用建议:
主要负责发送信号的或者是带死循环的槽使用方式一,主要负责响应信号的线程使用方式二。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值