Qt:GUI线程与后台线程的设计

文章讲述了Qt编程中,GUI线程用于处理界面事件和窗口对象,而其他线程(子线程)用于执行后台业务逻辑。强调了避免在非GUI线程中创建窗口对象和进行直接操作的重要性,以及如何通过信号槽机制实现线程间的数据通信。
摘要由CSDN通过智能技术生成
qt线程设计 GUI线程与后台线程:
qt中主线程通常是GUI线程,其任务是处理一些界面UI对象的消息事件;所有窗口对象【继承自QWidget的对象】的创建都要在GUI线程中创建【任何在其他线程中创建窗口对象的行为都是劣化行为!就算qt允许编译通过,运行时依然是在一个未开启事件循环的线程中,不能处理界面消息事件;就算自己添加了事件循环强制在二个线程中处理界面消息,这也是一种劣化设计】,并且不能将一个窗口对象移动到其他线程【将一个窗口对象移动moveToThread到其他线程的行为也会失败】

如果允许将界面对象移动到另一个线程,那么这时候原来线程上的消息事件要么被丢弃【对于界面UI来说就相当于按键失灵】【非界面对象虽然移动到其他线程也会丢失移动前所依附线程的事件队列上对于这个对象未处理的事件,但是这被看成是一种主动放弃】,要么移动时把界面消息事件也一起移动过去【效率低】;就算移动过去了,还要给其开启事件循环,不然依然不能响应界面事件消息;就算
不辞麻烦的做了以上说的,就相当于二套GUI线程处理界面更新,这在设计上完全不必要;一套GUI线程就能搞定的事情!
所以qt的线程设计就是 GUI线程 和其他线程;GUI线程处理界面,其他线程处理后台业务;

在qt中使用了多线程,有些事项是需要额外注意的:
默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新
子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理
主线程和子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制



  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值