qt中提供了三種在主線程之外建立工作執行緒的方法:1. 繼承qthread;2.繼承qobject,然後使用movetothread(qthread * targetthread)將物件移動到工作執行緒中執行;3.繼承qrunnable,並將建立的物件移動到qthreadpool中進行執行。
qt官方建議僅僅在需要擴充套件qthread本身的功能時使用第一種方法,而執行一般的工作時可使用第2種或第3種方法。後兩者的區別是第2種方法可以通過訊號進行執行緒間的通訊。qrunnable沒有繼承qobject,適合執行不關心執行進度或者不需要在中間環節進行控制的方法。
第2種方法裡面qobject和qthread的呼叫方法:
////------------------------把乙個物件移動到另外的執行緒中之後,在其他執行緒呼叫該物件的方法需要通過訊號槽的方式實現
myobject* myobj = new
myobject();
qthread* thread = new
qthread();
thread->start();
qdebug()
<< "
current thread id :
"<< qthread::currentthreadid() << "
new thread :
"<< thread->currentthreadid();
myobj->movetothread(thread);
qtimer::singleshot(
0, myobj, slot(slotfunc())); //
會在新建執行緒中呼叫
//myobj->slotfunc();
//會在當前執行緒中呼叫
qthread::currentthread()->sleep(2); //
暫停當前執行緒
qdebug() << "
quit thread";
thread->quit();
thread->deletelater();
myobj->slotfunc(); //
執行緒刪除之後,移動到其中的物件不會消失
//qthread::currentthread()->sleep(2);
//如果退出新建執行緒後等待一段時間再呼叫obj的刪除刪除,會因為新建執行緒已經消失而不會呼叫
//qtimer::singleshot(0, myobj, slot(slotfunc()));
//執行緒消失了,該方法不會被呼叫
myobj->deletelater(); //
如果前面呼叫了新建執行緒的退出方法,該方法有一定的概率會不起作用
qdebug() << "
thread running :
"<< thread->isrunning();
第7 9章 QObject和庫
第7章 庫 庫是按照可重用的方式組織的 模組組。庫中通常包含已經設計,測試和編譯過的 您可以輕易地將庫中的 鏈結到應用程式中。庫是乙個包含幾個已編譯檔案的檔案,為了便於編譯器定位符號和他們的定義,所有庫檔案都建立了索引。2。編譯時依賴與鏈結時依賴有何不同?如果為了完成編譯必須將progelement...
QObject之我見 備忘
bool connect const qobject sender,const char signal,const qobject receiver,const char method,qt connectiontype type qt autoconnection bool disconnect ...
QThread的使用要點和例子
程式實現多執行緒的作用這裡就不贅述了,這裡主要介紹qt多執行緒。qt使用多執行緒非常方便,用qthread類能非常方便地操作執行緒,配合qt特色的訊號和槽機制 signal slot 和qmutex類鎖即可完成各種跨執行緒的操作。首先需要包含標頭檔案qthread include新建乙個qthrea...