Qt執行緒 - 繼承QObject方式
阿新 • • 發佈:2018-12-28
Qt執行緒 - 繼承QObject方式
Qt使用執行緒有兩種方式,在新版本的Qt中,Qt官方推薦使用繼承QObject的方式,本文件記錄使用此方法執行緒的實驗過程。
本文轉自:http://beself.top/2018/11/09/qt-thread-inherit-qobject/
執行緒實驗總結
在實驗1 至實驗5終於得出結論,使用繼承QObject的方式實現多執行緒的方式,
- 使用繼承QObject的方式實現多執行緒的方式經過實驗證明是可以的,具體過程請仔細觀察實驗過程記錄;
- 本次實驗中實驗了終止執行緒的一種方式,通過變數來跳出迴圈執行緒;
- 在使用變數共享的方式退出執行緒是使用QMutexLocker的方式進行變數保護;
官方示例
class Worker : public QObject { Q_OBJECT public slots: void doWork(const QString ¶meter) { QString result; /* ... here is the expensive or blocking operation ... */ 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); connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater); connect(this, &Controller::operate, worker, &Worker::doWork); connect(worker, &Worker::resultReady, this, &Controller::handleResults); workerThread.start(); } ~Controller() { workerThread.quit(); workerThread.wait(); } public slots: void handleResults(const QString &); signals: void operate(const QString &); };
從示例中可以看出,總結一下步驟:
- 新建一個類並繼承QObject基類;
- 在主執行緒中new出這個新建的類,新類不能有父類,再宣告一個QThread類,並將類moveToThread到執行緒中;
- 通過start開始執行緒;
- 退出執行緒時需要退出執行緒;
更多實驗過程
更多實驗過程請檢視原文:http://beself.top/2018/11/09/qt-thread-inherit-qobject/