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建立的物件的新的執行緒之間的通訊,是通過使用含有互斥量,讀寫鎖,訊號量或者等待條件的共享變數...