QThread
一、用途简述
QThread类提供了一个与平台无关的管理线程的方法。一个QThread对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函数通过调用exec()函数来启动事件循环机制,并且在线程内部处理Qt的事件。在Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能及时响应用户的请求操作。
QThread的使用方法有如下两种:
- QObject::moveToThread()
- 继承QThread类重写run方法
二、使用方法
2.1moveToThread
步骤:
- 构造具体事件处理对象,即具体的work,继承自QObject,对象内处理事件流程的函数需要是槽函数,需要采用信号槽触发;
- 构造一个控制类,里面有work的对象,还有QThread对象,work对象使用moveToThread方法,把work资源转移到QThread对象内;
- connect方法,关联work处理事件槽函数和控制类信号。
- QThread线程对象使用start方法启动线程工作,然后控制类发射信号触发线程工作。
注意:
- 停止工作需要直接调用work的停止方法,信号槽触发work停止会失效。
- work类继承自QObject,但是work类对象不能指定父对象,否则会报错。
2.2继承QThread类重写run方法
步骤:
- 创建一个新类,继承自QThread;
- 重载protected方法void run(),这个函数内是具体线程工作内容;
注意:所有资源需要是在run方法内申请,这些新的资源才属于此线程。QThread内部的成员不属于子线程。socket、database使用线程时尤其注意。
三、相关参考
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-03-18 博客园定制页面(三)——博客右上角Fork me on GitHub设置