Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56529
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-09 21:53
文章分类
文章存档

2011年(1)

2009年(17)

我的朋友

分类: LINUX

2009-05-17 17:09:13

     QT Embeded应用没有来严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server胡管理功能,被称为QWS server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只有兼做server的功能而已。
 这个所谓的server功能主要是由QWSServer对象来实现的。
     1.QWSServer的管理对象
     (1)keyboard设备和mouse设备
     keyboard和mouse是一个display系统的输入设备,在QT Embedded中,QWSServer会初始化keyboard和mouse设备,并对其管理。读取key事件和mouse事件,并传送给相应的应用程序。
     至于diplay系统中的显示设备screen,这不是由QWSServer统一管理的,为了提高效率,每个QT Client都可以打开这个设备,并向screen读写,以实现显示功能。但是每个QT client都向screen读写,屏幕会不会写乱了? 在QT中,这部分工作是由一个叫做QWSRegionManager的对角来管理的,以后再详细说明。

     (2)QWSClient
     看上去,QWSServer QWSClient这两个类应该组成一个c/s结构,实际上QWSServer代表一个server socket. 当QT Client连接到QWSServer的server socket时,QWSServer会产生一个client socket与QT Client的socket进行通讯。QWSClient看上去像一个stub对象,代表一个QT client进程。每个QT Client进程在QWS server进程都有相应的QWSClient。

     (3)QWSWindow
     QWSWindow对应于QT Client的toplevel widget。nontoplevel widget由于每个QT Client自行管理。所有toplevel widget需要接受QWS Server的管理,包括widget的focus,altitude,region等。

     (4)其它
     QWSServer管理的其它全局对象,还有QWSScreenSaver,QWSSoundServer等。

     2.QWSServer的初始化
     QWSServer的初始化是在QApplication的初始化过程中完成的,具体的流程如下:
     QApplication::construct-->qt_init-->QWSServer::startup
     QWSServer::startup是一个static函数,创建全局对象qwsServer.QWSServer的构造函数会依次初始化所管理的对象。

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

dragonscroll2009-09-27 09:55:06

对,谢谢你的意见 qws server进程比较特殊,即是server 又是client, 所以既有QWSServer, 又有标记为-1的Client, 可能有些时候整个嵌入式系统只有一个GUI应用 为什么要多个client? 一个线程一个client? 分别去连接server? QT Embedded还不能支持这么复杂的设计,client不能和线程关联起来,只能一个进程一个client

chinaunix网友2009-09-14 16:52:59

对于QWSClient应该有两种存在形式,你所说的socket的链接方式只是进程间的通讯方式,在进程内则是直接通过outgoning及incoming的消息队列来实现的。 对于进程内部的C/S模式有点疑问。在server中维持的client pair中,进程内的Client以-1来标记,这样是不是就意味着在本地中只能有一个client存在呢?如果是,为什么不能多个?