マルチスレッドQThreadを達成するためのQtの一つの方法

基本的な考え方

  1. 複数のスレッドを使用する必要性は、QThreadインスタンスを作成し、メインスレッドにおいて、
  2. QObjectのサブクラスの消費パッケージの動作は、(ワーカーワーク・クラスと呼ぶ)チャネル機能を継承。
  3. それらの間の関係を確立するQThreadインスタンスとワーカーインスタンス、シグナルとスロットを作成します。
  4. 労働者インスタンスmoveToThread(QThread *スレッド)関数を呼び出して、行くために作成したQThreadスレッドに移動します。
  5. 最後に、実行はQThreadスレッド()メソッドを起動します。

労働階級

worker.h

1  #ifndefのWORKER_H
 2  の#define WORKER_H
 3の#include <QObjectを>
 4  クラスワーカー:公共QObjectを
 5  {
 6      Q_OBJECT
 7  公共8      明示的な労働者(QObjectを*親= 0 )。
9つの 信号:
 10      ボイド完全な();
11  公衆スロット:
 12      ボイド doLongTimeWork(); // 耗时操作
13  }。
14  #endifの // WORKER_H

worker.cpp

1つの#include " worker.h " 
2の#include <QDebug>
 3の#include <QThread>
 4ワーカー::ワーカー(QObjectを* 親):QObjectを(親)
 5  {
 6  
7  }
 8  ボイドワーカー:: doLongTimeWork()
 9  {
 10      qDebug()<< __ LINE __ __ << FUNCTION __ << " -入力してください" 11      qint64カウント= 100 12      一方(count-- ){
 13          QThread :: msleep(10 )。
14         qDebug()<< __ LINE __ __ << FUNCTION __ << " 回数= " << 数えます。
15      }
 16      EMITの完全な()。
17      qDebug()<< __ LINE __ __ << FUNCTION __ << " -休暇" 18 }

使用

 1 void MainWindow::on_pushButtonDoWork_clicked()
 2 {
 3     Worker* worker = new Worker();
 4     QThread* thread = new QThread();
 5     //当线程启动时,执行Worker类的耗时函数doLongTimeWork()
 6     connect(thread,SIGNAL(started()),worker,SLOT(doLongTimeWork()));
 7     //当耗时函数执行完毕,发出complete()信号时,删除worker实例
 8     connect(worker,SIGNAL(complete()),worker,SLOT(deleteLater()));
 9     //当worker对象实例销毁时,退出线程
10     connect(worker,SIGNAL(destroyed(QObject*)),thread,SLOT(quit()));
11     //当线程结束时,销毁线程对象实例
12     connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));
13     //移动worker对象实例到线程中
14     worker->moveToThread(thread);
15     //启动线程
16     thread->start();
17 }

 

おすすめ

転載: www.cnblogs.com/ybqjymy/p/12169811.html