生活随笔
收集整理的這篇文章主要介紹了
Qt中的多线程编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
1 Qt中的多線程編程
1.1 實現多線程的方式
Qt中通過QThread直接支持多線程:
- QThread是一個跨平臺的多線程解決方案。
- QThread以簡潔易用的方式實現多線程編程。
QThread中的關鍵成員函數:
- void run():
- void start():
- void terminate():
QThread編程示例:
編程實驗:多線程編程初探
#include <QtCore/QCoreApplication>
#include <QThread>
#include <QDebug>class MyThread
: public QThread
{
protected
:void run(){qDebug() << objectName() << " : " << "run() begin";for(int i
=0; i
<5; i
++){qDebug() << objectName() << " : " << i
;sleep(1);}qDebug() << objectName() << " : " << "run() end";}
};int main(int argc
, char *argv
[])
{QCoreApplication
a(argc
, argv
);qDebug() << "main() begin";MyThread t
;t
.setObjectName("t");t
.start();MyThread tt
;tt
.setObjectName("tt");tt
.start();for(int i
=0; i
<100000; i
++){for(int j
=0; j
<10000; j
++){}}qDebug() << "main() end";return a
.exec();
}
1.2 線程的生命周期
線程的生命周期如下:
重點注意:
- 在工程開發中terminate()是禁止使用的!terminate()會使得操作系統暴力終止線程,而不會考慮數據完整性,資源釋放等問題!
問題:如何在代碼中優雅的終止線程?
解決方案思路:
- run()函數執行結束是優雅終止線程的唯一方式。
- 在線程類中增加標志變量m_toStop(volatile bool)。
- 通過m_toStop的值判斷是否需要從run()函數返回。
解決方案如下:
編程實驗:優雅的控制線程
#include <QtCore/QCoreApplication>
#include <QThread>
#include <QDebug>class Sample
: public QThread
{
protected
:volatile bool m_toStop
;void run(){qDebug() << objectName() << " : begin";int* p
= new
int[10000];for(int i
=0; !m_toStop
&& (i
<10); i
++){qDebug() << objectName() << " : " << i
;p
[i
] = i
* i
* i
;msleep(500);}delete
[] p
;qDebug() << objectName() << " : end";}
public
:Sample(){m_toStop
= false
;}void stop(){m_toStop
= true
;}
};int main(int argc
, char *argv
[])
{QCoreApplication
a(argc
, argv
);qDebug() << "main begin";Sample t
;t
.setObjectName("t");t
.start();for(int i
=0; i
<100000; i
++){for(int j
=0; j
<10000; j
++){}}t
.stop();qDebug() << "main end";return a
.exec();
}
參考資料:
QT實驗分析教程
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Qt中的多线程编程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。