我有一个doWork函数希望在另一个线程中执行,我需要创建一个新线程,将doWork所在类的对象放到新线程中,开启新线程后,执行doWork函数
1.创建一个新线程 workerThread;
2.继承自QObject的类Worker中定义doWork函数
3.通过moveToThread将worker对象从当前线程“推”到另一个线程workerThread
4.绑定一些线程开始和结束执行的信号槽
5.开启线程workerThread.start()
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const QString ¶meter) //线程函数
{
QString result;
emit resultReady(result);
}
signals:
void resultReady(const QString &result);//线程函数执行完后发送信号
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller()
{
Worker *worker = new Worker;
worker->moveToThread(&workerThread);//将worker对象从当前线程“推”到另一个线程workerThread
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);//线程结束释放该线程中的对象。
connect(this, &Controller::operate, worker, &Worker::doWork);
//connect(&workerThread, &QThread::started, worker, &Worker::doWork);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
// 启动线程
workerThread.start();//通过调用 run() 开始执行线程。 如果线程已经在运行,则此函数不执行任何操作。
}
~Controller()
{
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &);//响应线程函数执行完后发送信号的槽函数
signals:
void operate(const QString &);
};