Qt有两种多线程的方法,其中一种是继承QThread的run函数,
另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里。
Qt4.8之前都是使用继承QThread的run这种方法,但是Qt4.8之后,Qt官方建议使用第二种方法。
具体的使用步骤如下:
1.从QObject派生一个类,将耗时的工作写在该类的槽函数中。
2.将派生类对象移动到一个QThread中,该线程需要start。(这一步使用moveToThread)
3.通过信号连接派生类的槽函数,并通过信号触发槽函数。(槽函数在子线程中执行)
//tes.h
#ifndef TES_H
#define TES_H
#include <QCoreApplication>
#include <QDebug>
#include <QThread>
#include <QString>
#include <QObject>
class Worker:public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent=0);
~Worker();
signals:
void sig_finish();
public slots:
void slot_dowork();
};
#endif // TES_H
//tes.cpp
#include "tes.h"
Worker::Worker(QObject *parent):QObject(parent)
{
qDebug()<<"worker()";
}
Worker::~Worker()
{
qDebug()<<"~worker()";
}
vo