成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談 Qt 子線程 信號(hào)隊(duì)列

移動(dòng)開發(fā)
本文介紹的是Qt子線程 信號(hào)隊(duì)列,關(guān)于線程的更多資料請(qǐng)參考本文末尾,將會(huì)有介紹。先來看內(nèi)容。

Qt子線程 信號(hào)隊(duì)列是本文要介紹的內(nèi)容,聲明:以下純屬個(gè)人理解,看到的就當(dāng)錯(cuò)的看。對(duì) Qt 的多線程編程沒有深究,只了解了基本的用法,夠我用就行了。

之所以寫這篇文章是因?yàn)榍皫滋煊龅揭粋€(gè)疑問:如果其他幾個(gè)線程同時(shí)向一個(gè)線程發(fā)signal,而這個(gè)線程沒有自己的事件循環(huán),那是不是會(huì)丟失signal呢?

下面是我總結(jié)的兩種子線程的工作方式

1、讓子線程進(jìn)入事件循環(huán),這樣的話多余的signal就會(huì)進(jìn)入該線程的事件隊(duì)列,不會(huì)丟失。問題是這時(shí)子線程的槽函數(shù)都是在該子線程對(duì)象所在的線程(很可能是主線程)執(zhí)行,這樣似乎失去了多線程的意義。

  1. void run()  
  2. {  
  3.     exec();  
  4. }  
  5. void slot1();  //處理工作  
  6. void slot2();  //處理工作 

2、子線程沒有事件循環(huán),直接在run里處理工作,主線程可通過信號(hào)連接到該子線程的槽來控制flag,從而控制子線程的暫停和繼續(xù)。但是,如果還有另外幾個(gè)線程不時(shí)地向通過slot2()給somarg賦值的話,即使給slot2()加了鎖保證了不會(huì)被同時(shí)賦值,但那些同時(shí)進(jìn)入的賦值信號(hào)沒有隊(duì)列可進(jìn),這樣會(huì)不會(huì)就丟失了呢

  1. void run()  
  2. {  
  3.     while(1)  
  4.     {  
  5.     while(flag)  
  6.     {  
  7.         dosomething(somarg);  
  8.     }  
  9.     }  
  10. }  
  11. void slot1();  //控制flag  
  12. void slot2();  //給somarg賦值 

經(jīng)試驗(yàn),雖然第一種辦法不需要exec()進(jìn)入事件循環(huán)也可以觸發(fā)槽們?cè)谡{(diào)用這個(gè)線程對(duì)象的線程工作,但是這樣無法保證同時(shí)傳進(jìn)去的信號(hào)不會(huì)丟失;加上exec()后,子線程進(jìn)入事件循環(huán),不會(huì)馬上結(jié)束,并且會(huì)有事件隊(duì)列,這樣可以保證信號(hào)不會(huì)丟失。唯一的缺點(diǎn)就是這些槽不工作在子線程。

擬對(duì)策:

建立一個(gè)隊(duì)列線程,CQueueThread,這個(gè)線程進(jìn)入自己的事件循環(huán),在這個(gè)類中有其它線程的對(duì)象作為成員變量,這些線程則沒有各自的事件隊(duì)列,直接在run中死循環(huán)工作,主線程信號(hào)連接到CQueueThread的槽來控制其他線程開始工作,這樣信號(hào)會(huì)進(jìn)入事件隊(duì)列不會(huì)丟失,而那些死循環(huán)的繁雜工作則各自在各自的線程中運(yùn)行。

這個(gè)CQueueThread可以用主線程代替(主線程必然是有事件循環(huán)的),主線程中有個(gè)槽作緩沖用,接收來自各方的命令,再魚貫發(fā)往目標(biāo)線程。

"run()開的才是新線程,QThread的構(gòu)造函數(shù)以及其他成員都在你的主線程中。"

小結(jié): Qt 子線程 信號(hào)隊(duì)列的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。關(guān)于線程的更多資料,請(qǐng)參考編輯推薦。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-30 11:23:29

Qt 線程

2011-06-13 10:03:19

Qt 多線程 編程

2011-06-30 17:31:32

Qt 多線程 信號(hào)

2010-07-15 15:32:10

Perl線程

2011-06-28 15:37:34

Qt 內(nèi)存

2011-06-21 16:51:21

Qt 靜態(tài) 編譯

2011-07-05 10:22:44

Qt Sqlite

2011-07-04 15:30:24

Qt 布局 GridLayout

2023-10-23 10:02:58

RabbitMQ延遲隊(duì)列

2011-09-07 16:36:00

Qt Widget

2011-06-15 10:08:01

Qt CVS

2011-06-15 16:50:09

Qt 模塊

2011-06-28 17:21:50

QT UI designer

2011-07-05 18:40:19

QT 信號(hào) 機(jī)制

2011-06-09 09:45:35

Linux QT 信號(hào)

2011-07-05 18:32:52

QT 信號(hào) 機(jī)制

2023-11-15 13:55:32

2011-06-28 14:02:34

QT ARM

2011-06-10 16:44:17

Qt 瀏覽器

2011-08-29 10:34:36

QTQWebKitJavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久777777 | 精品久久99 | 亚洲午夜精品 | 黄色精品 | 本道综合精品 | 日韩免费激情视频 | 国产激情视频在线免费观看 | 久久综合爱 | 亚洲精品无 | www.蜜桃av | 国产精品美女久久久久久免费 | 久久男人天堂 | 一级片免费在线观看 | 日韩av高清在线 | 日本特黄特色aaa大片免费 | 亚洲欧美日韩精品久久亚洲区 | 日韩成人高清 | 国产精品一区在线观看 | 天天拍夜夜爽 | 亚洲国产电影 | 先锋资源网站 | 国产电影一区二区三区爱妃记 | 久久久美女 | 狠狠亚洲| 欧美性久久久 | 国产成人a亚洲精品 | 在线看片国产 | 国产综合欧美 | 久久久久久亚洲 | 亚洲精品一区二区三区中文字幕 | 在线免费观看成年人视频 | 99在线资源 | 欧美中文在线 | 国产精品久久久久久吹潮日韩动画 | 国产高清在线精品一区二区三区 | 中文字幕精品一区 | 91精品国产91久久久久久吃药 | 成人精品一区二区三区中文字幕 | 午夜精品一区二区三区免费视频 | 欧美激情精品久久久久久变态 | 国产精品视频一区二区三区 |