QT 14 線程使用
阿新 • • 發佈:2017-10-12
創建 簡單 時也 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 線程使用