Qt開啟多執行緒

2021-09-19 12:44:21 字數 1580 閱讀 6660

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工程,不要勾選ui介面。然後分別在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程式構建和執行後,結果如下圖所示:

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

兩種建立多執行緒方式)

qt 多執行緒

qt通過三種形式提供了對執行緒的支援。它們分別是,一 平台無關的執行緒類,二 執行緒安全的事件投遞,三 跨執行緒的訊號 槽連線。這使得開發輕巧的多執行緒qt程式更為容易,並能充分利用多處理器機器的優勢。多執行緒程式設計也是乙個有用的模式,它用於解決執行較長時間的操作而不至於使用者介面失去響應。在qt...

Qt 多執行緒

qt 包含下面一些執行緒相關的類 qthread 提供了開始乙個新執行緒的方法 qthreadstorage 提供逐執行緒資料儲存 qmutex 提供相互排斥的鎖,或互斥量 qmutexlocker 是乙個便利類,它可以自動對 qmutex 加鎖與解鎖 qreadwriterlock 提供了乙個可以...

Qt多執行緒

今天學習qt的多執行緒,在學習多執行緒主要是兩個方面。一是多執行緒的基礎概念,二是多執行緒的同步,三是怎麼和主線程進行通訊。在這個主線程上面可以開始由qthread建立的物件的新的執行緒。這些由qthread建立的物件的新的執行緒之間的通訊,是通過使用含有互斥量,讀寫鎖,訊號量或者等待條件的共享變數...