在
void QWSDisplay::Data::init()
中,如果为客户端程序,调用
connectToPipe()
跟服务器建立连接。然后向服务器发送QWSIdentifyCommand命令,然后使用
waitForConnection()
等待命令返回。在waitForConnection()中,首先,调用
fillQueue()
,在fillQueue()中,首先调用
QWSServer::processEventQueue()
,如果为服务器所在的程序,服务器会处理该程序的客户事件,填充相应队列。如果为客户端程序,该函数什么都不做。然后调用
QWSEvent *e = readMore()
读取一个事件,并对该事件根据不同类型分类,放入不同的队列或处理,相对QWSIdentifyCommand的返回为QWSEvent::Connected。然后会循环调用readMore(),直到读出所有事件。如果读到这个事件,fillQueue()直接返回,waitForConnection()也直接返回,否则,waitForConnection()还会重复刷新输出缓冲区,继续等待两个动作,直到超时。
在waitForConnection()正确返回的时候,它会带回一些信息,主要包括qws_client_id,qws_display_spec等,然后QWSDisplay::Data::init()调用
waitForCreation()
等待返回QWSEvent::Creation事件,从而做一些其他主要的初始化。
之后,客户端程序的运行环境就建立好了
阅读(548) | 评论(0) | 转发(0) |