QThread的正確使用方法

2021-06-22 07:48:57 字數 1069 閱讀 7091

**:

qt自帶的文件和例子中使用qthread都是繼承qthread,然後過載run,

今天想在繼承自qthread類中自定義乙個槽,覺得對qthread的訊號-槽的機制在多執行緒的情況下有些不清楚的地方,猜想qthread的槽並不是執行在qthread例項建立的子執行緒中,但我需要讓槽執行在子執行緒中,查了一下資料,發現了qthread更好的使用方法。

如果不需要自定義槽,倒無所謂

第一種方法是在建構函式中呼叫 movetothread(this)

**如下

class mythread : public qthread

// void run();

signals:

void progress(int);

void dataready(qbytearray);

public slots:

void dowork();

void timeouthandler();

};第二種方法,執行緒作為一種作業系統資源,不參與業務**,推薦

class producer : public qobject

signals:

void produced(qbytearray *data);

void finished();

};class consumer : public qobject

signals:

void consumed();

void finished();

};int main(int argc, char **argv)

注意 1) qobject::movetothread()來改變它和它孩子們的執行緒親緣關係,假如物件有父親,它不能移動這種關係。

2) 在另乙個執行緒(而不是建立它的那個執行緒)中delete qobject物件是不安全的。除非你可以保證在同一時刻物件不在處理事件。可以用qobject::deletelater(),它會投遞乙個deferreddelete事件,這會被物件執行緒的事件迴圈最終選取到。

3)qobject例項的建立與建立時的執行緒相關,可以引申出與建立時的執行緒的事件機制相關(訊號-槽是此機制的乙個高層封裝)

QThread 的使用方法

20101023更新 qthread 使用 qthread與qwidget的使用 起源 昨天不小心看到qt開發人員 bradley t.hughes blog中的一片文章 you are doing it wrong 結果看得頭昏腦脹 好歹也自學了近1年的qt,也一直很小心 很認真地閱讀qt和man...

QThread 的使用方法

1.不使用事件迴圈。這是官方的 manual example 以及相關書籍中都介紹的一種的方法。a.子類化 qthread b.過載 run 函式,run函式內有乙個 while 或 for 的死迴圈 c.設定乙個標記為來控制死迴圈的退出。2.使用事件迴圈。部落格 you are doing it ...

QThread和QTimer的使用方法

說明 1 一下小結不保證對,如果錯誤希望指正 2 queue和direc代表是的connect的鏈結方式,qt directconnection和qt queuedconnection 小結 我想實現的乙個小定時器程式 輸入s start 定時器啟動,列印資訊。輸入e end 定時器停止執行.大概實...