Qt5 9實現簡單的多執行緒例項 類QThread

2022-09-24 12:48:13 字數 1787 閱讀 2964

qt開啟多執行緒,主要用到類qthread。有兩種方法,第一種用乙個類繼承qthread,然後重新改寫虛函式run()。當要開啟新執行緒時,只需要例項該類,然後呼叫函式start(),就可以開啟一條多執行緒。第二種方法是繼承乙個qobject類,然後利用movetothread()函式開啟乙個執行緒槽函式,將要花費大量時間計算的**放入該執行緒槽函式中。第二種方法可以參考我寫的另一篇部落格:

下面我總結的主要是第一種方法。(注意:只有在run()函式裡面才是新的執行緒,所有複雜邏輯都應該在run()函式裡面做。當run()函式執行完畢後,該執行緒生命週期結束。)

建立多執行緒步驟如下:

a1新建乙個類mythread,基類為qthread。

a2重寫類mythread的虛函式void run();,即新建乙個函式protected void run(),然後對其進行定義。

a3在需要用到多執行緒的地方,例項mythread,然後呼叫函式mythread::start()後,則開啟一條執行緒,自動執行函式run()。

a4當停止執行緒時,呼叫mythread::wait()函式,等待執行緒結束,並且**執行緒資源。

1.1新建乙個widget工程,不要勾選介面。然後分別在mythread.h,mythread.cpp,widget.h,widget.cpp,main.cpp分別新增如下**。

mythread.h

#ifndef mythread_h

#define mythread_h

#include

class mythread : public qthread;

#endif // mythread_h

mythread.cpp

#include "mythread.h"

#include

#include

mythread::mythread()

void mythread::closethread()

void mythread::run();

#endif // widget_h

widget.cpp

#include "widget.h"

#include

#include

widget::widget(qwidget *parent)

: qwidget(parent)

void widget::createview()

void widget::openthreadbtnslot()

void widget::finishedthreadbtnslot()

1.2程式構建和執行後,結果如下圖所示:

參考內容:

正確終止執行緒經典教程)

兩種建立多執行緒方式)

到此這篇關於qt5.9實現簡單的多執行緒例項(類qthread)的文章就介紹到這了,更多相關qt5.9 多執行緒內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!

本文標題: qt5.9實現簡單的多執行緒例項(類qthread)

本文位址:

點讚打賞

分享如果認為本文對您有所幫助請贊助本站

宣告:凡註明"本站原創"的所有文字等資料,版權均屬程式設計客棧所有,歡迎**,但務請註明出處。

標籤:[db:tags]

**qt記憶體洩漏返回列表

您可能感興趣的文章:

廣告贊助

廣告贊助

最新發布

全站最新

廣而告之

© 2018-2021 程式設計客棧 贛icp備17006162號-9

贛公網安備 36110202000251號

top

QT多執行緒簡單實現及變數傳遞

自定義訊號與槽 qt多執行緒簡單實現 多執行緒間變數傳遞 主線程類 export key.h ifndef export key h define export key h include main widget.h namespace ui class texport work class exp...

PHP多執行緒的實現(PHP多執行緒類)

通過web伺服器來實現php多執行緒功能。當然,對多執行緒有深入理解的人都知道通過web伺服器實現的多執行緒只能模仿多執行緒的一些效果,並不是真正意義上的多執行緒。但不管怎麼樣,它還是能滿足我們的一些需要的,在需要類似多執行緒的功能方面還是可以採用這個類。view source print?01.0...

c 委託實現多執行緒的例項

前面學習了委託,事件和多執行緒相關的知識。今天我們就通過在專案中常見的例項來加深對多執行緒的應用。在winform應用程式中,經常用進度條顯示進度資訊。這時候就可能用到多執行緒。如果不採用多執行緒控制進度條的話,視窗介面很容易假死 無法看到進度資訊,看起來像介面卡住了 在這個例項中,我們建立乙個窗體...