最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Qt 中多線程的使用方法1--重寫 run() 函數(shù)

2023-06-01 23:52 作者:鋼廠小霸王_X  | 我要投稿

在進(jìn)行開發(fā)桌面應(yīng)用程序的時(shí)候,有些情況下應(yīng)用程序需要處理比較復(fù)雜的邏輯,如果只有一個(gè)線程去處理這些邏輯,就會(huì)導(dǎo)致窗口界面卡頓,無法響應(yīng)用戶操作。為了解決這個(gè)問題,可以采用多線程的方式來處理,其中一個(gè)線程負(fù)責(zé)處理窗口事件,而其他線程則負(fù)責(zé)處理復(fù)雜的邏輯運(yùn)算。多個(gè)線程各司其職,既能提高用戶體驗(yàn),又可以優(yōu)化程序執(zhí)行效率。

在 qt 中使用了多線程,有些事項(xiàng)是需要額外注意的:

  • 默認(rèn)的線程在Qt中稱之為窗口線程,也叫主線程,負(fù)責(zé)窗口事件處理或者窗口控件數(shù)據(jù)的更新

  • 子線程負(fù)責(zé)后臺(tái)的業(yè)務(wù)邏輯處理,子線程中不能對(duì)窗口對(duì)象做任何操作,這些事情需要交給窗口線程處理

  • 主線程和子線程之間如果要進(jìn)行數(shù)據(jù)的傳遞,需要使用Qt中的信號(hào)槽機(jī)制。

線程類 QThread

Qt 中提供了一個(gè)線程類,通過這個(gè)類就可以創(chuàng)建子線程了,Qt 中一共提供了兩種創(chuàng)建子線程的方式。

常用共用成員函數(shù):

信號(hào)槽:

?靜態(tài)函數(shù):

任務(wù)處理函數(shù):

在使用 Qt 進(jìn)行多線程編程時(shí),如果想讓創(chuàng)建的子線程執(zhí)行某個(gè)任務(wù),需要?jiǎng)?chuàng)建一個(gè)新的類,讓其繼承自 QThread,然后重寫 run() 函數(shù),并在函數(shù)體中編寫對(duì)應(yīng)的任務(wù)處理流程。值得注意的是,這個(gè)函數(shù)是一個(gè)受保護(hù)的成員函數(shù),不能夠在類的外部直接調(diào)用,而是需要通過當(dāng)前線程對(duì)象調(diào)用 start() 槽函數(shù)來啟動(dòng)子線程。啟動(dòng)后,子線程一旦開始運(yùn)行,run() 函數(shù)也就順理成章地被調(diào)用了。


使用方式 :

1.? 需要?jiǎng)?chuàng)建一個(gè)線程類的子類,讓其繼承 QT 中的線程類 QThread,比如:

2.??重寫父類的 run () 方法,在該函數(shù)內(nèi)部編寫子線程要處理的具體流程

3.??在主線程中創(chuàng)建子線程對(duì)象,new幾個(gè)都可以,多個(gè)功能一樣的線程可以用一個(gè)指針數(shù)組存儲(chǔ)地址

4.??啟動(dòng)子線程,調(diào)用 start () 方法

  • 不能在類的外部調(diào)用 run () 方法啟動(dòng)子線程,在外部調(diào)用 start () 相當(dāng)于讓 run () 開始運(yùn)行。

  • 當(dāng)子線程別創(chuàng)建出來之后,父子線程之間的通信可以通過信號(hào)槽的方式

  • 在 Qt 中在子線程中不要操作程序中的窗口類型對(duì)象,不允許,如果操作了程序就掛了

  • 只有主線程才能操作程序中的窗口對(duì)象,默認(rèn)的線程就是主線程,自己創(chuàng)建的就是子線程

示例代碼:

在下面的窗口中,點(diǎn)擊按鈕開始在兩個(gè)子線程中進(jìn)行不同的排序,在主線程里面通過信號(hào)槽機(jī)制處理子線程返回的結(jié)果,同時(shí)顯示在UI界面。

最終結(jié)果

同時(shí)我們可以看到不同線程的地址和運(yùn)行速度也是不一樣的。

mytread.h

mytread.cpp:

widget.cpp:

這種在程序中添加子線程的方式是非常簡(jiǎn)單的,但是也有弊端,假設(shè)要在一個(gè)子線程中處理多個(gè)任務(wù),所有的處理邏輯都需要寫到run()函數(shù)中,這樣該函數(shù)中的處理邏輯就會(huì)變得非?;靵y,不太容易維護(hù)。同時(shí)重寫的run()里面不能傳入?yún)?shù),需要我們通過信號(hào)的方式來實(shí)現(xiàn)。后面還會(huì)介紹一個(gè)moveToThread()的方法,這個(gè)方法更加靈活,用的也較多。


Qt 中多線程的使用方法1--重寫 run() 函數(shù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
沂水县| 河曲县| 贺兰县| 沂南县| 台中县| 于田县| 安龙县| 东安县| 娄烦县| 南和县| 巨鹿县| 巴马| 清流县| 兴仁县| 铜山县| 蒲城县| 新龙县| 柳江县| 高邑县| 房产| 沛县| 安吉县| 北流市| 衡东县| 金乡县| 修水县| 乐亭县| 大同市| 靖宇县| 荃湾区| 浦县| 莆田市| 石屏县| 徐汇区| 梧州市| 宜昌市| 垣曲县| 永善县| 青铜峡市| 长春市| 改则县|