理解Qt多執行緒類

2021-06-08 07:37:04 字數 2002 閱讀 9554

point 1:qthread類的例項與普通類的例項沒什麼不同,只是執行著的run()函式會不同

例1:在mdialog中,使用

在mdialog中使用

1.connect(this, signal(sigdialogsignal()), mythread, slot(slotthreadslot()));

當emit sigdialogsignal()時,是會在mdialog所在的執行緒a中執行的.因為mythread與mdialog同屬於乙個執行緒, 這時thread可以看做乙個普通類的例項.另外,因為connect函式的連線方式預設是自動連線,而對同屬於乙個純種的兩個物件,自動連線會使用直接連線,即slot在發出signal的執行緒中立即執行.

例2:1.#include "mthread.h" 2.#include 3.mthread::mthread(qobject *parent)

4.    : qthread(parent)

5. 9.10.mthread::~mthread()

11.

14.15.void mthread::run()

16.

6.    exec();             //如果此事件迴圈不能進入,剛此執行緒不會收到任何signal 7.}

point 3:執行緒a中的指標可指向執行緒b中建立的物件例項,  這個例項屬於執行緒b. 指標僅僅是乙個位址, 而物件例項的變數/**等都屬於執行緒b.

例1:1.class mthread : public qthread

2.;

11.void mthread::run()

12.

16.//如此宣告,mprint所指向的物件屬於另乙個執行緒.例2:

1.class mthread : public qthread

2.;

18.19.void mthread::run()

20.以上這樣寫run(),mytimer在run()中new,即mytimer這個指標屬於舊執行緒,但mytimer所指向的qtimer例項的實體在新的執行緒中,testfoo()會在新執行緒中執行.

例3:1.void mthread::run()

2.以上這樣寫run(),mytimer在run()中宣告,即mytimer屬於新的執行緒,testfoo()也會在新執行緒中執行.

例4:1.class mthread : public qthread

2.;

18.19.20.void mthread::run()

21.以上這樣寫run(),testfoo()會在建立mytimer的老執行緒中執行.因為可以看到,mytimer和this(即mythread),都是在同乙個執行緒中,只是在另乙個執行緒中(run()),做了connect操作.

point 5:slot不會中斷同執行緒中的slot.

例1:1.#include "mthread.h" 2.#include 3.mthread::mthread(qobject *parent)

4.    : qthread(parent)

5. 9.10.mthread::~mthread()

11.

14.15.void mthread::run()

16.

19.20.void mthread::slotprint()

21.

9.10.mthread::~mthread()

11.

14.15.void mthread::run()

16.

20.21.void mthread::slotprint()

22.

26.27.void mthread::testfoo()

28.{

29.    for (int i = 0; i < 100; ++i) {

30.        for (int j = 0 ; j < 10000; ++j) {

31.            qdebug()<<"---------"<

qt 多執行緒

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

Qt 多執行緒

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

Qt多執行緒

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