Qt/Qtopia 的进程间通讯

先看看Qt所提供的进程间通讯的机制:
1) D-BUS
  在编译的时候加上DBUS的支持,QtDBUS模块包括很多类,QDBus为头的类。
  因为很多第三方的库用的是D-BUS协议通讯,所以Qt可以用QtDBUS来和这些软件通讯。
2)TCP/IP
  QTNetwork模块负责处理网络通讯,提供了QHttp,QFtp等类
3)共享内存
  QSharedMemory类实现了对操作系统共享内存的访问
4)Qt Communucations Protocol (QCop)
  QCopChannel类 (只在embedded版本中有),QCop是对Qt的signal/slot机制的扩展,它使得一个进程发出的signal,连接到另一个进程的slot。其实现原理其实就是有client /server,通过socket,在server里记录了channel的名字,以及对应关系,然后转发消息给相应的进程。具体可参考
   http://blog.chinaunix.net/u2/67984/showart_1354503.html
 用法是
发送方:直接调用send函数发消息,
接收方: 初始化一个QCopChannel实例(以你想监听的channel名字为参数),然后connect它的received信号到一个slot去处理。


我们再来看看Qtopia所提供的进程间通讯机制,Qtopia提供了3个类。
QtopiaIpcAdaptor
QtopiaIpcEnvelope
QtopiaChannel

Qtopia 推荐用QtopiaIpcAdaptor,因为它更powerful 并且更易于支持客户定制的类,
QtopiaIpcAdaptor用法也很简单 。
例如:
sender : 发出 changeValue message
 QtopiaIpcAdaptor *adaptor = new QtopiaIpcAdaptor("QPE/Foo");
    QtopiaIpcAdaptor::connect
        (source, SIGNAL(valueChanged(int)), adaptor, MESSAGE(changeValue(int)));

receiver : 调用 setValue slot
 QtopiaIpcAdaptor *adaptor = new QtopiaIpcAdaptor("QPE/Foo");
    QtopiaIpcAdaptor::connect
        (adaptor, MESSAGE(changeValue(int)), dest, SLOT(setValue(int)));

另外的2个类 QtopiaChannel,QtopiaIpcEnvelope 是为了为了支持以前的应用程序。
QtopiaChannel  其实就是对QcopChannel的再包装,,
  它提供的几个函数分别为
  flush        ---》调用QCopChannel::flush()
  isRegistered  ---》调用QCopChannel::isRegistered
  send(const QString &channel, const QString &msg) -->调用QCopChannel::send (不带参数的消息)
  send ( const QString & channel, const QString & msg, const QByteArray & data ) -->调用QCopChannel::send (带参数的消息)
所以QtopiaChannel实际上没做多少事情。

QtopiaIpcEnvelope的作用是使得发消息更加易于使用,它继承QDataStream,这使得对于参数可以
用<< 来添加
用法是 :     QtopiaIpcEnvelope e(channelname, messagename);
    e << parameter1 << parameter2 << ...;
 然后在析构函数中,调用了 QtopiaChannel::send把消息发出去

所以Qtopia所提供的3个类都是对Qt的QCop的包装,使得更好用而已。

 

from: http://blog.chinaunix.net/u1/35351/showart_2078973.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值