往期链接:
- 《QThread源码浅析》
- 《子类化QThread实现多线程》
- 《子类化QObject+moveToThread实现多线程》
- 本文章实例的源码地址:https://gitee.com/CogenCG/QThreadExample.git
继承QRunnable+QThreadPool实现多线程的方法个人感觉使用的相对较少,在这里只是简单介绍下使用的方法。我们可以根据使用的场景来选择方法。
此方法和QThread的区别:
- 与外界通信方式不同。由于QThread是继承于QObject的,但QRunnable不是,所以在QThread线程中,可以直接将线程中执行的结果通过信号的方式发到主程序,而QRunnable线程不能用信号槽,只能通过别的方式,等下会介绍;
- 启动线程方式不同。QThread线程可以直接调用start()函数启动,而QRunnable线程需要借助QThreadPool进行启动;
- 资源管理不同。QThread线程对象需要手动去管理删除和释放,而QRunnable则会在QThreadPool调用完成后自动释放。
接下来就来看看QRunnable的用法、使用场景以及注意事项;
一、步骤
要使用QRunnable创建线程,步骤如下:
- 继承QRunnable。和QThread使用一样, 首先需要将你的线程类继承于QRunnable;
- 重写run函数。还是和QThread一样,需要重写run函数;
- 使用QThreadPool启动线程。
二、实例
继承于QRunnable的类:
#ifndef INHERITQRUNNABLE_H
#define INHERITQRUNNABLE_H
#include <QRunnable>
#include <QWidget>
#include <QDebug>
#include <QThread>
class CusRunnable : public QRunnable
{
public:
explicit CusRunnable(){
}
~CusRunnable(){
qDebug() << __FUNCTION__;
}
void run(){
qDebug() << __FUNCTION__ << QThread::currentThreadId();
QThread::msleep(1000);
}
};
#endif // INHERITQRUN

本文介绍了使用QRunnable和QThreadPool实现多线程的方法,包括基本步骤、启动方式、与外界通信技巧等内容。通过实例展示了如何利用QMetaObject::invokeMethod进行跨线程通信。
最低0.47元/天 解锁文章
1052

被折叠的 条评论
为什么被折叠?



