Qt 中多線程的使用方法2--自定義working()函數(shù)

上回說到,重寫run()函數(shù)不能傳入?yún)?shù),這期這個(gè)自定義working()則可以解決這個(gè)問題。
其具體操作步驟如下:
? 1. 創(chuàng)建一個(gè)新的類,讓這個(gè)類從 QObject 派生
2.?在這個(gè)類中添加一個(gè)公共的成員函數(shù),函數(shù)體就是我們要子線程中執(zhí)行的業(yè)務(wù)邏輯
3.? 在主線程中創(chuàng)建一個(gè) QThread 對(duì)象,這就是子線程的對(duì)象
4.在主線程中創(chuàng)建工作的類對(duì)象(千萬(wàn)不要指定給創(chuàng)建的對(duì)象指定父對(duì)象)
5.?將 MyWork 對(duì)象移動(dòng)到創(chuàng)建的子線程對(duì)象中,需要調(diào)用 QObject 類提供的moveToThread() 方法
6. 啟動(dòng)子線程,調(diào)用 start(), 這時(shí)候線程啟動(dòng)了,但是移動(dòng)到線程中的對(duì)象并沒有工作
7. 調(diào)用 MyWork 類對(duì)象的工作函數(shù),讓這個(gè)函數(shù)開始執(zhí)行.
示例代碼:
還是之前的例子,改成working()方法,子線程處理事件,主線程處理返回結(jié)果

mytread.h:
mytread.cpp:
widget.h:
widget.cpp:

使用這種多線程方式,假設(shè)有多個(gè)不相關(guān)的業(yè)務(wù)流程需要被處理,那么就可以創(chuàng)建多個(gè)類似于 MyWork 的類,將業(yè)務(wù)流程放多類的公共成員函數(shù)中,然后將這個(gè)業(yè)務(wù)類的實(shí)例對(duì)象移動(dòng)到對(duì)應(yīng)的子線程中 moveToThread() 就可以了,這樣可以讓編寫的程序更加靈活,可讀性更強(qiáng),更易于維護(hù)。
最后不要忘了釋放線程資源
