1. 程式人生 > >QT 14 線程使用

QT 14 線程使用

創建 簡單 時也 ica 被調用 sta 產生 light object

1 線程基礎

QThread 是對本地平臺線程的一個非常好的跨平臺抽象。啟動一個線程非常簡單。讓我們看一段代碼,它產生另一個線程,該線程打印hello,然後退出。

// hellothread/hellothread.h    
class HelloThread : public QThread   
{   
    Q_OBJECT   
private:   
    void run();   
};   

  我們從QThread 中派生一個類並重載run()方法。

// hellothread/hellothread.cpp    
 void HelloThread::run()   
 {   
      qDebug() << "hello from worker thread " << thread()->currentThreadId();   
 }   

  run方法中包含的代碼會運行於一個單獨的線程。在本例中,一條包含線程ID的信號將會被輸出來。QThread::start() 會在另一個線程中調用該方法。

int main(int argc, char *argv[])   
 {   
     QCoreApplication app(argc, argv);   
     HelloThread thread;   
     thread.start();   
     qDebug() << "hello from GUI thread " << app.thread()->currentThreadId();   
     thread.wait();  // do not exit before the thread is completed!    
     return 0;   
 }   

  為了啟動該線程,我們的線程對象必須被初始化。start() 方法創建了一個新的線程並在新線程中調用重載的run() 方法。 在 start() 被調用後,有兩個程序計數器走過程序代碼。主函數啟動,且僅有一個GUI線程運行,它停止時也只有一個GUI線程運行。當另一個線程仍然忙碌時退出程序是一種編程錯誤,因此, wait方法被調用用來阻塞調用的線程直到run()方法執行完畢。

下面是運行代碼的結果:

hello from GUI thread 3079423696

hello from worker thread 3076111216

2 QObject 和線程

QT 14 線程使用