生活随笔
收集整理的這篇文章主要介紹了
Qt中的多线程编程
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 Qt中的多線程編程
- 1.1 實(shí)現(xiàn)多線程的方式
- 1.2 線程的生命周期
1 Qt中的多線程編程
1.1 實(shí)現(xiàn)多線程的方式
Qt中通過(guò)QThread直接支持多線程:
- QThread是一個(gè)跨平臺(tái)的多線程解決方案。
- QThread以簡(jiǎn)潔易用的方式實(shí)現(xiàn)多線程編程。
QThread中的關(guān)鍵成員函數(shù):
- void run():
- 線程體函數(shù),用于定義線程功能(執(zhí)行流)。
- void start():
- 啟動(dòng)函數(shù),將線程入口地址設(shè)置為run函數(shù)。
- void terminate():
QThread編程示例:
編程實(shí)驗(yàn):多線程編程初探
#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 線程的生命周期
線程的生命周期如下:
重點(diǎn)注意:
- 在工程開發(fā)中terminate()是禁止使用的!terminate()會(huì)使得操作系統(tǒng)暴力終止線程,而不會(huì)考慮數(shù)據(jù)完整性,資源釋放等問(wèn)題!
問(wèn)題:如何在代碼中優(yōu)雅的終止線程?
解決方案思路:
- run()函數(shù)執(zhí)行結(jié)束是優(yōu)雅終止線程的唯一方式。
- 在線程類中增加標(biāo)志變量m_toStop(volatile bool)。
- 通過(guò)m_toStop的值判斷是否需要從run()函數(shù)返回。
解決方案如下:
編程實(shí)驗(yàn):優(yōu)雅的控制線程
#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實(shí)驗(yàn)分析教程
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的Qt中的多线程编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。