一种简单实现QT多线程的方法
前言
在QT中实现多线程的方法有很多种,但实现过程往往非常繁琐,这里给大家介绍一种比较简单的实现QT多线程的方法
首先编写一个专门用来提供线程的线程类
1.头文件包含
#include <functional>
#include <QRunnable>
#include <QThread>
2.给模板类std::function<void()>起别名为function
3.继承QRunnable并重写run接口
这里就可以好好给各位说道说道了:
1.构造函数将参数的函数传参给成员mfunc
2.在用户start时,系统会调用run函数
3.如果mfunc在构造函数初始化成功了的话,run函数会调用mfunc指向的函数,从而实现多线程接口
class myThread : public QRunnable
{
public:
myThread(function func):mfunc(func)
{
//注册类型(非QT的基本类型需注册)
//qRegisterMetaType<int>("int");
}
~myThread()
{
}
void run()
{
if(mfunc)
{
mfunc();
}
}
private:
function mfunc;
};
使用步骤
1.引入库
#include "myThread.h"
#include <QThreadPool>
2、创建一个线程池,同时打印当前线程id
pool = new QThreadPool;
qDebug() << "MainWindow ThreadId:" << QThread::currentThreadId();
3、编写线程函数,再次打印当前线程id
myThread *mThread = new myThread([=]()
{
qDebug() << "mThread ThreadId::" << QThread::currentThreadId();
QMutexLocker locker(&mutex); //线程上锁
for (int i=0;i<10; i++)
{
qDebug() << i;
}
});
4、开始线程
运行一下查看结果:
可以看到线程id是不一样的,说明我们成功创建了一个线程。是不是很简单,只要创建好了线程类,下次使用就简单多了。
总结
首先编写一个线程类,之后在使用的时候给线程类的构造函数传参函数就行了。
资源在这:
https://download.csdn.net/download/xiaoliming1/20734073?spm=1001.2014.3001.5501