视频链接:https://www.bilibili.com/video/BV1iN411f7dY/?p=2&spm_id_from=pageDriver&vd_source=fa4ef8f26ae084f9b5f70a5f87e9e41b
在Qt中使用多线程可以提高用户体验,若只有一个线程进行处理,则会导致窗口卡顿,这是我们不想看到的
在Qt中使用多线程需要注意
1. 默认的线程在Qt中也称为窗口线程,也叫主线程,负责窗口事件的处理或者窗口控件数据的更新
2. 子线程负责处理后台业务逻辑,子线程中不能对窗口对象进行任何操作,这些事情要交给窗口线程处理
3. 主线程和子线程如果要进行信号的传递,需要使用信号槽机制
常用的API函数
优先级更正,最高为TimeCriticalPriority,最后一个优先级指子线程的优先级跟随主线程的优先级
使用多线程步骤
第二种方法
在第二种使用多线程方法中
任务对象不需要指定父对象并且一个任务类可以有多个任务函数或者将不同任务对象移动到同一个线程中(任务按照线性执行),建议使用第二种,降低耦合,便于维护
错误示范
当前情况下不再是多线程,而是主线程执行这两个working函数
线程资源的释放
- 在创建线程对象的时候为其指定父对象,这样利用Qt线程树机制,线程资源会被自动释放
- 接收到整个窗口被析构时的信号,释放线程资源
Qt中的线程池
在Qt中,封装了线程池类,这样我们就不需要手写线程池了,它为我们提供了许多方法,我们只需要掌握其中的几个即可
举个例子
多继承保证既能使用信号槽机制,又能被封装成runnable类,只需要重写run方法即可