Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532201
  • 博文数量: 237
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-05 22:02
个人简介

目前在一家公司担任软件总监,主要涉及智能手机,笔记本电脑的开发

文章分类

全部博文(237)

文章存档

2024年(18)

2023年(68)

2022年(13)

2021年(7)

2020年(11)

2019年(3)

2018年(10)

2017年(8)

2012年(7)

2011年(4)

2010年(32)

2009年(41)

2008年(6)

2007年(9)

分类: LINUX

2009-10-26 17:12:29

先看看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的包装,使得更好用而已。




阅读(1252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~