方式一
1.创建线程类Thread
2.继承QThread类
3.重写run函数
4.实例化线程类
5.调用start函数
示例:
//MyThread.h
#ifndef MyTHREAD_H
#define MyTHREAD_H
#include <QThread>
class MyThread : public QThread
{
Q_OBJECT
private:
int id;
public:
explicit MyThread(QObject *parent = nullptr);
protected:
void run() Q_DECL_OVERRIDE;
}
#endif // MyTHREAD_H
//MyThread.cpp
#include "MyThread.h"
#include <QDebug>
MyThread::MyThread(QObject *parent) :
QThread(parent),
id(0)
{
}
void MyThread::run()
{
while(true)
{
qDebug()<<id++;
sleep(1);
}
}
//使用线程
MyThread *myThread = new MyThread;
myThread->start();
方式二
1.创建线程类
2.继承QObject类
3.增加run槽函数
4.实例化线程类
5.实例化QThread类
6.调用线程类的moveToThread函数(参数传入QThread类对象)
7.QThread类的started信号连接线程类的run槽函数
8.调用QThread类的start函数
示例:
//MyThread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
class MyThread: public QObject
{
int id;
public:
MyThread();
public slots:
void run();
};
#endif // MYTHREAD_H
//MyThread.cpp
#include "MyThread.h"
#include <QDebug>
#include <QThread>
MyThread::MyThread() :
id(0)
{
}
void MyThread::run()
{
while(true)
{
qDebug()<<id++;
QThread::sleep(1);
}
}
//使用线程
QThread *thread = new QThread;
MyThread *myThread = new MyThread;
myThread->moveToThread(thread);
connect(thread, &QThread::started, myThread, &MyThread::run);
thread->start();
方式三
1.创建线程类
2.继承QRunnable类
3.重写run函数
4.实例化QThreadPool类
5.实例化线程类
6.调用QThreadPool类的start函数(参数传入线程类对象)
示例:
//MyThread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
#include <QRunnable>
class MyThread : public QObject, public QRunnable
{
Q_OBJECT
int id;
public:
MyThread();
~MyThread();
public:
void run() Q_DECL_OVERRIDE;
};
#endif // MYTHREAD_H
//MyThread.cpp
#include "MyThread.h"
#include <QDebug>
#include <QThread>
MyThread::MyThread() :
id(0)
{
}
MyThread::~MyThread()
{
}
void MyThread::run()
{
while(true)
{
qDebug()<<id++;
QThread::sleep(1);
}
}
//使用线程
QThreadPool *threadPool = new QThreadPool;
MyThread *myThread = new MyThread;
threadPool->start(myThread);
1731



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



