欢迎访问mehome的博客

Tomorrow is another day.
Fork me on GitHub

QThread

一、用途简述

QThread类提供了一个与平台无关的管理线程的方法。一个QThread对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函数通过调用exec()函数来启动事件循环机制,并且在线程内部处理Qt的事件。在Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能及时响应用户的请求操作。

QThread的使用方法有如下两种:

  1. QObject::moveToThread()
  2. 继承QThread类重写run方法


二、使用方法

2.1moveToThread

步骤:

  1. 构造具体事件处理对象,即具体的work,继承自QObject,对象内处理事件流程的函数需要是槽函数,需要采用信号槽触发;
  2. 构造一个控制类,里面有work的对象,还有QThread对象,work对象使用moveToThread方法,把work资源转移到QThread对象内;
  3. connect方法,关联work处理事件槽函数和控制类信号。
  4. QThread线程对象使用start方法启动线程工作,然后控制类发射信号触发线程工作。

注意:

  1. 停止工作需要直接调用work的停止方法,信号槽触发work停止会失效。
  2. work类继承自QObject,但是work类对象不能指定父对象,否则会报错。


2.2继承QThread类重写run方法

步骤:

  1. 创建一个新类,继承自QThread;
  2. 重载protected方法void run(),这个函数内是具体线程工作内容;

注意:所有资源需要是在run方法内申请,这些新的资源才属于此线程。QThread内部的成员不属于子线程。socket、database使用线程时尤其注意。



三、相关参考

posted @ 2022-03-18 01:25  mehome  阅读(298)  评论(0编辑  收藏  举报