天天看點

# QT 線程 QThreadQT 線程 QThread

QT 線程 QThread

方式

1.Qt 4.7之前的線程實作方式

1.1 自定義一個類,繼承于QThread

class MyThread: pubilc QThread
{
	public:
	void run();// 才是線程處理函數(和主線程不在同一個線程)
	
}

void MyThread::run(){
	//!複雜的處理
}

[^注]: 不能直接調用 run(),使用start() 間接調用 run(). 
如:
 MyThread thread;
 //!啟動線程 
 thread.start();
           

2.最新線程實作方式

設定流程

2.1 設定一個類,繼承于QObject

2.2 類中設定一個線程函數(隻有一個是線程函數)

class MyThread:public QObject
{
Q_OBJECT
public slots:
	void myTimer(){
        while(1){
         emit mySignal();
        }
	}
signals:
	void startThread();	
}

           

使用流程

1.建立線程對象(不能指定父對象)

MyThread *myT = MyThread;

2.QThread 子線程對象

QThread * thread = new QThread(this);

3.把自定義線程類,加入到子線程

myT->moveToThread(thread);
           

a.直接使用 thread.start() 啟動子線程,隻能把線程開啟了,并沒有啟動線程處理函數

b.不能直接調用線程處理函數–>直接調用導緻線程處理函數和主線程在同一線程。

b.線程函數的啟動,必須通過 signal - slot

connect(this,&MyThread::startThread,myT,&MyThread::myTimer);

即:先 thread.start() 然後 emit startThread();

繼續閱讀