QThread和QObject的呼叫方法總結

2022-05-01 22:27:13 字數 1440 閱讀 8039

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...