QT 多線程中不同於新建繼承QThread類的方式:moveToThread()

兩篇博文可以看下:

https://www.cnblogs.com/vegetable/p/6648609.html

https://blog.csdn.net/wangjianbo09/article/details/83352930

 

Qt中線程的一種創建方式,就是使用QObject::moveToThread()函數。如下,直接上源代碼,可以把費時的任務放到doWork()方法裏進行,不阻塞主線程。

#ifndef WORKER_H
#define WORKER_H

#include <QObject>

class Worker : public QObject
{
    Q_OBJECT

public:
    Worker();
    ~Worker();
public slots:
    void doWork();
private:
    
};

#endif // WORKERR_H
 1 #include "Worker.h"
 2 #include <QDebug>
 3 
 4 Worker::Worker()
 5 {
 6 
 7 }
 8 
 9 Worker::~Worker()
10 {
11 
12 }
13 void Worker::doWork()
14 {
15     for (int i = 0;i < 10000;i++)
16     {
17         qDebug() << i;
18     }
19 }
1 m_pWorker = new Worker;
2     m_pWorkerThread = new QThread(this);
3 
4     connect(m_pWorkerThread, SIGNAL(started()),m_pWorker, SLOT(doWork()));
5     connect(m_pWorkerThread, SIGNAL(finished()), m_pWorker, SLOT(deleteLater()));
6     m_pWorker->moveToThread(m_pWorkerThread);

 分析一下,關於moveToThread()的機制,就好比是將一個普通的類,QT object類通過 moveToThread,將原有的普通類,包上了一層QThread類,這樣就更方便了,將某個函數定義成QThread中花銷時間最大的一個函數,相當於放進了QThread中的run()函數中。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章