QThread类和QRunnable类的使用方法简介

QThread类和QRunnable类是QT中提供线程操作的类,文章简单介绍两个类的使用方法。

QThread类

使用方法:1.继承QThread类;

自定义一个继承QThread的类MyThread,重载MyThread中的run()函数,在run()函数中写入需要执行的工作。

 调用start()函数来启动线程。

 

2.Qobject::moveToThread()

(1)定义一个继承于QObject的worker类,在worker类中定义一个槽slot函数doWork(),这个函数中定义线程需要做的工作。                                                                                                        (2)在要使用线程的controller类中,新建一个QThread的对象和woker类对象,使用moveToThread()方法将worker对象的事件循环全部交由QThread对象处理。

(3)建立相关的信号函数和槽函数进行连接,然后发出信号触发QThread的槽函数,使其执行工作。

 两种方法的区别方法的区别:1.直接继承的方法,只有run函数才会在子线程中运行,即使在run函数中调用自己的其他槽函数,其他槽函数依然是在主线程中运行。这种方法往往是在一直循环的任务中使用,run函数本身操作繁琐复杂,一般情况下不会退出;2.使用moveToThread的方法更加轻便,可以在一个类中添加若干个槽函数,都能在子线程中运行。使用这种方法往往会主动退出。

QRunnable类

使用方法:

1、继承QRunnable。和QThread使用一样,首先需要将你的线程类继承于QRunnable。            2、重写run函数。还是和QThread一样,需要重写run函数,run是一个纯虚函数,必须重写。    3、使用QThreadPool启动线程

 总结:

两个类的区别:1、QRunnable没有继承QObject,如果想使用信号与槽需要自己继承QObject;2、启动线程方式不同。QThread线程可以直接调用start()函数启动,而QRunnable线程需要借助QThreadPool进行启动。                                                                                                                3、资源管理不同。QThread线程对象需要手动去管理删除和释放,而QRunnable则会在QThreadPool调用完成后自动释放。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值