COM服务器的伪异步技术及其实现2013256989781.docVIP

COM服务器的伪异步技术及其实现2013256989781.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM服务器的伪异步技术及其实现1.????? COM异步技术 与普通同步执行的COM服务器不同,一个提供异步方法调用的COM服务器允许客户程序以一种非阻塞的方式来访问它,客户程序可以在等待调用返回的过程中继续进行别的工作,从而提高工作效率。 尤其随着Windows2000和COM+的发布,COM现在已经完全支持异步方法的调用了,通过IDL的定义,由MIDL编译器为接口的每个方法实现同步和异步两种独立的调用定义。但是COM提供的这种异步方法调用并非尽善尽美: 1)????? 这种技术发布较晚,只在WIN2000下被支持,所以用它开发的软件不能在Windows 95和Windows NT平台上运行。 2)????? 客户端使用不便,尽管COM通过MIDL生成的接口代理(proxy)与存根(stub)完成了大部分为支持异步方法调用所做的工作,客户端仍需要完成系列繁琐的细节工作。 3)????? 无论客户端还是服务器端都需要聚合由COM提供的对象,方法调用方式也有别于标准同步调用,因而不适用于标准ACTIVEX控件的编写,而ACTIVEX控件实质上是一种特殊的COM服务器。 由于上述一系列缺陷,往往需要一种替代解决办法,通常可以用一些基本的COM技术来构造一种伪异步技术。 2.????? COM应用 这种伪异步技术是通过接口回调(interface callback)的方法来实现的,它基于两项关键的COM技术: 连接点(Connection point)技术和COM多线程(Multithread)技术。 连接点技术的基础是COM的出接口(outgoing interface)。出接口与普通的接口不一样,它由COM服务器端进行定义,但却由用户程序来实现(此实现对象被称为接收器sink),并把接口指针告诉给COM服务器。由于出接口是在服务器的类型库中定义, 所以COM服务器可以很方便的利用此接口指针与客户进行通讯。但直接使用出接口,客户程序和COM服务器都需要出接口有一定的了解,为此COM又提供了连接点技术(可连接对象),如图: COM提供的可连接对象,通过IConnectionPointContainer接口管理所有的出接口。对应于每个出接口,可连接对象管理一个连接点对象,每一个连接点对象实现了IConnectionPoint接口,客户通过连接点对象建立接收器与可连接对象的连接,且通过两个枚举器的引入,使得可连接对象支持多个出接口,而每个出接口支持多个与接收器的连接。明显,连接点技术的实质是对出接口的一种封装。通过使用连接点技术,COM服务器可以用一种非常常规的方法描述它的引出接口,并为客户程序提供了一种标准的方法来实现这些接口,对于实现服务器组件的标准化非常方便,也有利于客户程序的独立开发,符合中间件开发的原则。 COM多线程管理相当复杂,要实现多线程,应对COM的线程模型有深入的了解。COM支持两种线程模型:单线程单元(STA,Single-Threaded Apartment)和多线程单元(MTA,MultiThreaded Apartment)。如图所示: 单元是一种抽象的概念,定义了一组对象的逻辑集合,这些对象共享同一组并发性和重入限制,每个COM对象都只能属于某一个单元。STA只能包含一个线程(单元线程),与32位Windows平台上的用户界面(UI)线程相似,单元线程拥有一个隐藏的窗口,所有对此线程中服务器组件方法的调用都被COM转化为消息(message),通过消息循环进行消息分发,并调用窗口过程保证调用到COM对象的成员函数中;而每个MTA可以包含多个线程(自由线程),自由线程相似于Windows平台的工作(Work)线程,不带消息分发,可以直接使用。每个进程只能有一个MTA,但是可以于有任意多个STA,每一个使用COM的线程必须通过调用CoInitialize(0)来新建一个STA,或者通过调用CoInitializeEx(0,COINT_MULTITHREAD)来创建或加入一个MTA,否则这个线程将出错。服务器组件实体存在于线程中,要么处于MTA中,要么处在STA中,别无选择。遵守如下规则:跨单元的接口指针传递需要调度,否则指针无效。 3.????? 构造伪异步COM服务器 3.1伪异步COM服务器总体框架 伪异步调用的实质是客户程序将一个自己所实现的接收器指针传递到COM服务器,当服务器的接口受到客户程序调用的时候将产生新的线程来实现功能任务,而客户程序的调用结束返回,新线程将在任务完成后通过传入的接口指针回调到客户程序,以通知客户程序当前调用服务的消息和结果,从而在客户程序和服务器之间产生一种对等关系。服务器和客户程序异步协商过程如下: 1)????? COM实现一个服务器组件对象,它要么处在STA中,要么

您可能关注的文档

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档