Qt 執行緒池的使用以及和主線程的訊息同步

2021-08-24 18:08:18 字數 838 閱讀 7926

qt中線程已經很早就出現了,關於多執行緒的使用的意義主要是為了減輕主線程的壓力,提高使用者的體驗。

例如:在主線程中需要載入資料庫中的很多**,那麼就可以考慮把多**的讀取放到工作執行緒中去,可以多載入幾個執行緒目的就是加快讀取**的速度。

通過執行緒池和qrunable實現多執行緒。

class loadtablerunable : public qobject, public qrunnable ;
loadtablerunable::loadtablerunable(qobject *parent)

: qobject(parent)

loadtablerunable::~loadtablerunable()

void loadtablerunable::run()

void loadtablerunable::initsqlstr(int id, std::string sqlstr)

void loadtaskmanager::loadtask(t_task_exten task) 

//還可以多載入幾個**

以上qrunable新增id的目的就是為了通過訊號槽的方式把查詢到的資料回傳回來,通過id方便辨識是查詢到哪張表

接收訊號的槽函式

//槽函式 - 執行完成後的放回結果

void loadtaskmanager::slotsqlresult(int id, std::vector

valuelist)

}

通過id就可以出來不同執行緒回傳過來的資料。以上就可以了

使用執行緒和執行緒池

1 new thread的弊端 執行乙個非同步任務你還只是如下new thread嗎?new thread new runnable start 那你就out太多了,new thread的弊端如下 a.每次new thread新建物件效能差。b.執行緒缺乏統一管理,可能無限制新建執行緒,相互之間競爭...

JDK執行緒池和Spring執行緒池的使用

jd 程池和spring執行緒池例項,非同步呼叫,可以直接使用 1 jd 程池的使用,此處採用單例的方式提供,見示例 public class threadpoolutil public static executorservice getexecutorservice 在其它地方可以直接這樣使用 ...

QT中的多執行緒 與主線程通訊

今天回想研究生期間做的專案,用到了qt的多執行緒通訊,當時一點都不懂,就這照貓畫虎地寫,如今因為上次面試中問到了,覺得得好好準備下 主線程可以通過建立 qthread 子類物件開啟乙個新的執行緒,如果這些執行緒間需要相互通訊,它們可以使用共享變數,同時使用 mutexes,read write lo...