Qt中的多執行緒程式設計

2021-10-21 02:07:05 字數 1475 閱讀 2834

1.業務類:**

1.1要在子執行緒中處理的業務操作抽象成乙個類(subthreadwork)(***繼承於qobject)**

1.2在類subthreadwork中自定義乙個業務處理函式(dosubthreadwork)

1.3在類subthreadwork中自宣告訊號(signalsubthreadwork()),通過自定義訊號與主線程直接通訊

2.主線程:

2.1在主線程中建立乙個執行緒物件作為子執行緒使用qthread pthread

2.2在主線程中建立業務類**(subthreadwork)物件 subthreadwork subthreadwork

2.3將業務類物件移入子執行緒中:subthreadwork.movetothread(pthread);

2.4在主線程中啟動子執行緒:pthread.start(); ****(***此時業務類還沒有工作,只是啟動了子執行緒)

2.5在主線程中傳送訊號,讓業務類接收,觸發業務類處理函式(dosubthreadwork) connect(this , &mainwidget::signalstart() , &subthreadwork ,

&dosubthreadwork::dosubthreadwork);

2.6.主線程設定槽函式,監聽業務類傳送的訊號,做出相應處理

connect(&subthreadwork , &subthreadwork::signalsubthreadwork , this

, &mainwidget::mysolt);**

假如類不是用嚮導生成的,滴加上q_object這個巨集**

1.1:繼承qthread類,實現乙個子類 (重寫乙個類,繼承於qthread,內部包含	子執行緒結束後要給主線程傳送的訊號signal)

1.2:重寫子執行緒類中的虛函式 run() [執行緒的入口函式]

1.3:(在主線程中建立乙個子執行緒物件thread*)需要時使用start函式啟動子線 程,執行run函式

1.4:使用訊號和槽完成和主線程之間的通訊

a.業務物件構造的時候不能指定父物件 new mywork();因為指定父物件後無	法將其指定到子執行緒中

b.子執行緒不能處理ui視窗或ui類

c.子執行緒中只能處理一些資料相關的操作,不能涉及視窗

d.在退出關閉子執行緒要柔和,使用quit()和wait(); delete(子執行緒業務物件)或在 析構中delete();

e.多執行緒處理同一塊記憶體,要加鎖mutex

f. connect函式的最後乙個引數的作用

第五個引數:

3.1:預設連線 auto_connection

3.2:佇列連線 (多執行緒) --->多執行緒時預設指定為佇列連線(槽函 數在訊號接受 所在的執行緒中執行)

3.3:直接連線 (單執行緒) --->訊號和槽函式在同乙個執行緒中執行**

Qt中的多執行緒程式設計

qt中的多執行緒程式設計 qthread 類,該類提供了建立乙個新執行緒以及控制線程執行的各種方法。執行緒是通過 qthread run 過載函式開始執行的 在 qt 系統中,始終執行著乙個gui 主事件執行緒,這個主線程從視窗系統中獲取事件,並將它們分發到各個元件去處理。在 qthread 類中還...

Qt中的多執行緒程式設計 2

首先,我們得知道qt4.4版本之前,qthread run 是純虛函式 virtual void run 0 qthread run 僅僅是個宣告,沒有任何屬性,子類是必須完全重寫run 的,這個時候我們也只有這一種建立多執行緒的方法。但是在qt4.4版本之後,qt對qthread run 做了修改...

Qt 多執行緒程式設計

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