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

QT源碼之Qt信號槽機制與事件機制的聯(lián)系

移動開發(fā)
本文就是來解決一個問題,就是當(dāng)signal和slot的連接為Qt::QueuedConnection,這時候這個連接是怎么分發(fā)處理的。下面就結(jié)合一下Qt的源代碼來分析一下!

QT源碼之Qt信號槽機制與事件機制的聯(lián)系是本文要介紹的內(nèi)容,通過解決一個問題,從中分析出的理論,先來看內(nèi)容。

本文就是來解決一個問題,就是當(dāng)signal和slot的連接為Qt::QueuedConnection,這時候這個連接是怎么分發(fā)處理的。下面就結(jié)合一下Qt的源代碼來分析一下。

  1. view plaincopy to clipboardprint?  
  2. if ((c->connectionType == Qt::AutoConnection     
  3.      && (currentThreadData != sender->d_func()->threadData     
  4.          || receiver->d_func()->threadData != sender->d_func()->threadData))     
  5.     || (c->connectionType == Qt::QueuedConnection)) {     
  6.     queued_activate(sender, signal, *c, argv);     
  7.     continue;     
  8. } else if (c->connectionType == Qt::BlockingQueuedConnection) {     
  9.     blocking_activate(sender, signal, *c, argv);     
  10.     continue;     
  11. }    
  12. if ((c->connectionType == Qt::AutoConnection  
  13.      && (currentThreadData != sender->d_func()->threadData  
  14.          || receiver->d_func()->threadData != sender->d_func()->threadData))  
  15.     || (c->connectionType == Qt::QueuedConnection)) {  
  16.     queued_activate(sender, signal, *c, argv);  
  17.     continue;  
  18. } else if (c->connectionType == Qt::BlockingQueuedConnection) {  
  19.     blocking_activate(sender, signal, *c, argv);  
  20.     continue;  
  21. }  

這段代碼的意思是:當(dāng)前connectionType為Qt::AutoConnection并且,signal和slot不在一個線程或者是signal和不再當(dāng)前線程中;或者是c->connectionType為 Qt::QueuedConnection這時候調(diào)用函數(shù)

queued_activate,如果c->connectionType 為Qt::BlockingQueuedConnection則調(diào)用函數(shù)blocking_activate

我們當(dāng)queued_activate和blocking_activate一樣就可以了。

queued_activate函數(shù)很簡單,就是對參數(shù)轉(zhuǎn)換一下,然后調(diào)用   

 

  1. QCoreApplication::postEvent(c.receiver, new QMetaCallEvent(c.method,sender,signal,nargs,types,args,semaphore)); 

注意: postEvent第二個參數(shù)是QMetaCallEvent。這樣這個signal-slot的connection就發(fā)送到receiver的消息隊列中去了。

接下來消息隊列如何處理QMetaCallEvent,請參考QT源碼解析剖析Qt事件機制原理(詳解 QT 源碼之 Qt 事件機制原理

后記:通過這種方法Qt實現(xiàn)了跨線程的signal-slot傳遞,并且這種signal-slot機制的傳遞是利用消息隊列,所以說是線程安全的。

小結(jié):關(guān)于QT源碼之Qt信號槽機制與事件機制的聯(lián)系的問題介紹完了,希望本文對你有幫助。

責(zé)任編輯:zhaolei 來源: CSDN博客
相關(guān)推薦

2011-06-09 09:45:35

Linux QT 信號

2011-06-23 13:38:27

QT 元對象 信號

2011-06-23 14:05:32

Qt 事件機制

2011-06-13 10:21:25

QT 信號 槽機制

2011-06-15 14:38:01

QT 信號

2011-07-05 18:32:52

QT 信號 機制

2011-07-05 18:40:19

QT 信號 機制

2021-12-23 15:07:40

QtC++編譯程序

2011-07-01 14:20:59

Qt 事件

2011-07-01 14:14:34

Qt 事件

2011-06-09 17:26:17

Qt 插件 API

2011-07-01 15:04:49

Qt 內(nèi)省

2023-10-07 08:21:35

PyQtPython

2011-06-20 15:40:19

QT 信號

2011-06-23 11:16:39

Qt Excel

2011-06-23 15:10:39

Qt 窗體

2011-06-28 15:47:13

Qt 信號

2011-06-22 17:09:50

QT 進程 通信

2011-06-23 15:32:05

Qt Windows消息

2011-06-29 17:20:20

Qt 內(nèi)存 QOBJECT
點贊
收藏

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

主站蜘蛛池模板: 久久99精品久久久久久国产越南 | 狠狠操你 | 久久久精品视频免费 | 成人自拍视频网站 | 成人高清视频在线观看 | 国产精品精品视频一区二区三区 | 久久婷婷国产香蕉 | 久久久国产一区 | 99国产精品一区二区三区 | 精品国产乱码一区二区三区 | 国产成人精品一区 | 国产免费一区二区 | av中文字幕在线观看 | 精品免费 | 国产精品1| 久久久久久久久久久高潮一区二区 | 欧美一区二区三区在线看 | 欧美一区二区在线观看 | 网色| 激情毛片 | 欧美国产精品一区二区三区 | 日韩成人在线视频 | 羞羞视频在线网站观看 | 久久国产综合 | 久久精品亚洲成在人线av网址 | 国产激情精品一区二区三区 | 免费观看视频www | 久久精品一区二区三区四区 | 人人澡人人射 | 操操日| 久久网一区二区三区 | 欧美精品一区二区三 | 高清人人天天夜夜曰狠狠狠狠 | com.色.www在线观看 | 一级黄色在线 | h视频免费在线观看 | 成人午夜性成交 | 久久亚洲高清 | 狠狠干狠狠操 | 久久国产精品偷 | 国产精品久久久久久久毛片 |