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();