天天看点

一种简单实现QT多线程的方法一种简单实现QT多线程的方法前言首先编写一个专门用来提供线程的线程类使用步骤总结

一种简单实现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、开始线程

运行一下查看结果:

一种简单实现QT多线程的方法一种简单实现QT多线程的方法前言首先编写一个专门用来提供线程的线程类使用步骤总结

可以看到线程id是不一样的,说明我们成功创建了一个线程。是不是很简单,只要创建好了线程类,下次使用就简单多了。

总结

首先编写一个线程类,之后在使用的时候给线程类的构造函数传参函数就行了。

资源在这:

https://download.csdn.net/download/xiaoliming1/20734073?spm=1001.2014.3001.5501