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

qt线程设计 GUI线程与后台线程:
qt中主线程通常是GUI线程,其任务是处理一些界面UI对象的消息事件;所有窗口对象【继承自QWidget的对象】的创建都要在GUI线程中创建【任何在其他线程中创建窗口对象的行为都是劣化行为!就算qt允许编译通过,运行时依然是在一个未开启事件循环的线程中,不能处理界面消息事件;就算自己添加了事件循环强制在二个线程中处理界面消息,这也是一种劣化设计】,并且不能将一个窗口对象移动到其他线程【将一个窗口对象移动moveToThread到其他线程的行为也会失败】

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

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



你可能感兴趣的:(qt,开发语言)