嵌入式开发-课件-第9章、Qt进程与线程.pdfVIP

  • 11
  • 0
  • 约3.97万字
  • 约 29页
  • 2018-05-30 发布于广东
  • 举报

嵌入式开发-课件-第9章、Qt进程与线程.pdf

入式学院—华清远见旗下品牌: 《Qt4 图形设计与 入式开发》 《Qt4 图形设计与 入式开发》——第9 章、Qt 进程与线程 第9 章 Qt 进程与线程 入式学院—华清远见旗下品牌: 《Qt4 图形设计与 入式开发》——第9 章、Qt 进程与线程 9.1 Qt 内部进程通信 Qt 作为一种跨平台的基于C++ 的GUI 系统,它能够提供给用户构造图形用户 界面的强大功能。自从1996 年Qt 被原Trolltech 公司发布以来,该系统成为世界上 很多图形用户所使用的主要系统。 更为重要的是,Linux 操作系统的桌面环境系统KDE 也是基于Qt 构造的。目 前,Qt 已经提供了 MS/Windows 、UNIX/X 11 和嵌入式平台的支持,得到了越来 越广泛的应用。 在Qt 系统中,不仅有着构造完善的系统结构,而且为了满足用户对编写图形用户 界面应用的种种需求,它还创建了许多新的系统机制,其中Qt 所特有的内部进程通信 机制尤其值得一提。 下面是分析基于 QT 的应用进程之间通信常用的 3 种机制:QCOP 协议、 Signal-Slot 机制和FIFO 机制。给出了各自的使用方法,并指出了各自的使用场合。 1 QCOP 协议 QCOP 是 Qt 内部的一种通信协议,这种协议用于不同的客户之间在同一地址 空间内部或者不同的进程之间的通信。目前,这种机制还只在 Qt 的 入式版本中 提供。 为实现这种通信机制,Qt 中包含了由 QObj ect 类继承而来的 QCopChannel 类, 该类提供了诸如 send()和isRegistered() 等静态函数,它们可以在脱离对象的情况下 使用。 为了在管道中接收通信数据,用户需要构造一个 QCopChannel 的子类并提供 receive() 函数的重载函数,或者利用connect()函数与接收到的信号相联系。 注意:在 Qt 系统中,只提供了QCOP 协议机制和用于接收消息的类,而如何 发送消息则没有提供 应的类供用户使用。 在基于 Qt 的桌面系统 Qtopia (QPE )中,则提供了 应的发送类: QCopEnvelope 。用户可以通过该类利用管道向其他进程发送消息。该类将在 QCopChannel 发送QCop 消息的过程进行了封装,用户只需要调用该类中的相关函 数就可以方便地实现进程之间的通信过程。 在这里需要明确的是:一方面,QCop 消息的发送要利用QCopEnvelope 类,另 一方面,接收消息则是通过与一个QCopChannel 关联。 在发送消息时,将利用如下的协议机制。 QCopEnvelope e (channelname, messagename); 于需要携带参数的消息,必须使用“()”运算符将参数添加到envelope 中。 e parameter1 parameter2 ...; 于不带参数的消息,只需要利用: QCopEnvelope e (channelname, messagename); 入式学院—华清远见旗下品牌: 《Qt4 图形设计与 入式开发》——第9 章、Qt 进程与线程 在Qtopia 中,所有的channels 名都以“QPE/ ”开始,而messagename 则是一个函数 的标识符。 在接收 消息时 ,通常只需要利用在应用程序 中预先定义好 的 QPE/Application/ {appname}管道,当然,也可以根据需要自己定义管道,并将其与 一个slot()函数 关联。 myChannel = new QCopChannel( QPE/FooBar, this ); connect( myChannel, SIGNAL (received (const QCString ,

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档