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

解析 Qt 進(jìn)程間通信類 QCOP協(xié)議

移動(dòng)開發(fā)
本文介紹的是Qt進(jìn)程間通信類QCOP協(xié)議,在 Qt 系統(tǒng)中,只提供了 QCOP 協(xié)議機(jī)制和用于接收消息的類,而如何發(fā)送消息則沒有提供相應(yīng)的類供用戶使用。

QCOPQt 內(nèi)部的一種通信協(xié)議,這種協(xié)議用于不同的客戶之間在同一地址空間內(nèi)部或者不同的進(jìn)程之間的通信。目前,這種機(jī)制還只在 Qt 的嵌入式版本中提供。

為實(shí)現(xiàn)這種通信機(jī)制,Qt 中包括了由 QObject 類繼承而來的 QCopChannel 類,該類提供了諸如 send()、isRegistered() 等靜態(tài)函數(shù),它們可以在脫離對(duì)象的情況下使用。為了在 channel 中接收通信數(shù)據(jù),用戶需要構(gòu)造一個(gè) QCopChannel 的子類并提供 receive() 函數(shù)的重載函數(shù),或者利用 connect() 函數(shù)與接收到的信號(hào)相聯(lián)系。

值得一提的是,在 Qt 系統(tǒng)中,只提供了 QCOP 協(xié)議機(jī)制和用于接收消息的類,而如何發(fā)送消息則沒有提供相應(yīng)的類供用戶使用。

在基于 Qt 的桌面系統(tǒng) Qtopia(QPE)中,則提供了相應(yīng)的發(fā)送類:QCopEnvelope。用戶可以通過該類利用 channel 向其他進(jìn)程發(fā)送消息。該類將通過 QCopChannel 發(fā)送 QCop 消息的過程進(jìn)行了封裝,用戶只需要調(diào)用該類中的相關(guān)函數(shù)就可以方便地實(shí)現(xiàn)進(jìn)程之間的通信過程。一方面,QCop 消息的發(fā)送要利用 QCopEnvelope 類,另一方面,接收消息則是通過與一個(gè) QCopChannel 相關(guān)聯(lián)。

在發(fā)送消息時(shí),將利用如下的協(xié)議機(jī)制:

  1. QCopEnvelope e(channelname, messagename);  

對(duì)于需要攜帶參數(shù)的消息,必須使用"<<()"運(yùn)算符將參數(shù)添加到envelope中。

  1. << parameter1 << parameter2 << ...;  

對(duì)于不帶參數(shù)的消息,只需要利用:

  1. QCopEnvelope e(channelname, messagename);  

在Qtopia中,所有的channels名都以"QPE/"開始,而messagename則是一個(gè)函數(shù)的標(biāo)識(shí)符。

在接收消息時(shí),通常只需要利用在應(yīng)用程序中預(yù)先定義好的QPE/Application/{appname}管道,當(dāng)然,也可以根據(jù)需要自己定義管道,并將其與一個(gè)slot函數(shù)相關(guān)聯(lián):

  1. myChannel = new QCopChannel( "QPE/FooBar", this );  
  2. connect( myChannel, SIGNAL(received(const QCString &, const QByteArray &)),  
  3.           this, SLOT(fooBarMessage( const QCString &, const QByteArray &)) );  

下面將具體的通信過程舉例如下:

在需要接收消息的類(如Window1)中定義管道:

 

  1. QCopChannel *doChannel = new QCopChannel("QPE/Do", this);  
  2.  connect(doChannel, SIGNAL(received(const QCString &, const QByteArray &)),  
  3.     this, SLOT(doMessage(const QCString &, const QByteArray &)));  

同時(shí),需要在該類中定義相應(yīng)的消息處理函數(shù)doMessage,

  1. void Window1::doMessage(const QCString &msg, const QByteArray &args){  
  2.  QDataStream stream(args, IO_ReadOnly);  
  3.   if(msg == "Message1(QString)") {  
  4.     QString text;  
  5.       stream >> text;  
  6.         button->setText(text);  
  7.  }  
  8.   else if(msg == "Message2()") {  
  9.       close();  
  10.     }  
  11. }  

其中的Message1(QString)和 Message2(QString)都是用戶自己定義的消息,該函數(shù)中分別對(duì)這些消息進(jìn)行了相應(yīng)的處理。在該例中當(dāng)收到帶有參數(shù)的Message1消息 時(shí),將該字符串參數(shù)stream顯示在按鈕button上;當(dāng)收到Message2消息時(shí),將執(zhí)行關(guān)閉Window1窗口的動(dòng)作,當(dāng)然用戶可以根據(jù)需要自 行編寫相應(yīng)的處理過程。

另一方面,在類Class2中需要發(fā)出消息的函數(shù)function中利用QCopEnvelope發(fā)送消息:

  1. void Class2::function(){  
  2.    QCopEnvelope e("QPE/Do", "Message1(QString)");  
  3.        e << param;  
  4.         }  

這里發(fā)出了Message1消息,并將需要攜帶的參數(shù)param發(fā)送到管道中。

通過這樣的過程,用戶可以很方便地實(shí)現(xiàn)不同對(duì)象、不同進(jìn)程之間通信過程,而且可以根據(jù)需要在通信過程中任意傳遞參數(shù)。

小結(jié):Qt 進(jìn)程間通信類  QCOP協(xié)議的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

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

2011-06-22 17:09:50

QT 進(jìn)程 通信

2011-06-22 16:50:09

Qt 進(jìn)程 通信機(jī)制

2017-08-06 00:05:18

進(jìn)程通信開發(fā)

2011-06-22 17:27:19

QT 進(jìn)程通信

2010-01-05 10:00:48

Linux進(jìn)程間通信

2020-11-04 07:17:42

Nodejs通信進(jìn)程

2018-01-12 14:35:00

Linux進(jìn)程共享內(nèi)存

2013-03-28 13:14:45

AIDL進(jìn)程間通信Android使用AI

2017-06-19 13:36:12

Linux進(jìn)程消息隊(duì)列

2019-11-08 14:47:49

TCPIP網(wǎng)絡(luò)

2018-05-30 13:58:02

Linux進(jìn)程通信

2019-05-08 11:10:05

Linux進(jìn)程語言

2021-07-06 21:30:06

Linux進(jìn)程通信

2020-11-18 09:06:04

Python

2023-12-04 10:49:37

網(wǎng)絡(luò)通信

2022-02-07 09:10:34

進(jìn)程通信加鎖

2020-12-01 09:22:43

進(jìn)程協(xié)程開發(fā)

2022-07-04 08:29:13

electron通信

2019-11-27 10:36:11

進(jìn)程通信IPC

2011-04-08 10:10:26

CIDR路由
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美美女爱爱视频 | 欧美精品在线观看 | 久久国产一区二区三区 | 日韩精品一区二区在线 | 中文字幕专区 | 91av在线免费观看 | 亚洲精品一区在线 | 中文字幕观看 | 亚洲一区二区三区在线视频 | 中文精品久久 | 99精品久久| 欧美成视频 | 成人黄色电影在线观看 | 日韩一二区 | 国产成人精品久久二区二区91 | 免费观看a级毛片在线播放 黄网站免费入口 | 亚洲精品一区在线观看 | 天天草天天干 | 久久国产精品色av免费观看 | 欧美激情欧美激情在线五月 | 亚洲欧美中文日韩在线v日本 | 第一区在线观看免费国语入口 | 成人综合一区二区 | 91精品午夜窝窝看片 | 国产剧情一区二区三区 | 日韩欧美三级 | 久操伊人 | 麻豆久久久9性大片 | 日韩高清成人 | 国产精彩视频在线观看 | 午夜精品一区二区三区在线观看 | 国产一区二区在线看 | 亚洲乱码国产乱码精品精98午夜 | 国产一区二区三区高清 | 男女污污动态图 | 久久男人 | www.日本国产 | 一区二区三区视频在线观看 | 天天狠狠 | 99久久免费精品国产男女高不卡 | 久久久久国产精品一区二区 |