這個系列是使用一段時間的總結,包括線程創建,線程間通信等的小結,每天寫一點。
第一小節是線程的創建和使用。
首先這幾篇文章主要是面向新人的,因為Qt簡單容易上手的緣故,常常有很多新人剛接觸編程就使用Qt,對線程的概念有點模糊所以有必要簡單說明下。
線程在程序中用途非常廣,常常用於避免程序阻塞、分布式計算、多任務協作等功能。
有的朋友為了達到程序不阻塞、提高運行效率等效果喜歡在一個程序中生成幾十甚至幾百個線程,然而需要注意的是,很多時候線程太多並不能提高效率,如果線程沒有休眠或者等待的話,最多同時運行的數量是CPU的核心數量,CPU需要在諸多線程中切換和調度,反而降低了系統效率。而在另一種情況,如果線程大部分時間是等待(如等待某個返回、讀取硬盤等),那麼數量稍微增多些的確會提高效率。
所以歸納起來:
Qt中如何創建使用線程,非常簡單,只需要繼分為三步:
(一)首先,新建Qt命令行項目,在項目中創建線程類:
CSimpleThread.h
1 #ifndef CSIMPLETHREAD_H 2 #define CSIMPLETHREAD_H 3 #include <QThread> 4 5 class CSimpleThread : public QThread 6 { 7 Q_OBJECT 8 public: 9 CSimpleThread(); 10 }; 11 12 #endif // CSIMPLETHREAD_H
CSimpleThread.cpp
1 #include "CSimpleThread.h" 2 #include <QDebug> 3 CSimpleThread::CSimpleThread() 4 { 5 6 }
(二)重寫run(),每5秒打印一句話
CSimpleThread.h
1 #ifndef CSIMPLETHREAD_H 2 #define CSIMPLETHREAD_H 3 #include <QThread> 4 5 class CSimpleThread : public QThread 6 { 7 Q_OBJECT 8 public: 9 CSimpleThread(); 10 void run(); 11 }; 12 13 #endif // CSIMPLETHREAD_H
CSimpleThread.cpp
1 #include "CSimpleThread.h" 2 #include <QDebug> 3 CSimpleThread::CSimpleThread() 4 { 5 6 } 7 8 void CSimpleThread::run() 9 { 10 while (true) { 11 qDebug()<<"CSimpleThread run!"; 12 sleep(5); 13 } 14 }
(三)主線程中創建線程對象,使用start()方法啟動線程。
main.cpp
1 #include <QCoreApplication> 2 #include <CSimpleThread.h> 3 4 int main(int argc, char *argv[]) 5 { 6 QCoreApplication a(argc, argv); 7 8 CSimpleThread *SThread = new CSimpleThread(); 9 SThread->start(); 10 11 return a.exec(); 12 }
編譯運行,線程就在後台運行了,每隔5秒打印一句話。
下一個內容是怎麼與線程通信。