Applet线程模型及基于Applet线程模型的调用构件的方法技术

技术编号:4300291 阅读:220 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种Applet线程模型及基于Applet线程模型的调用构件的方法。本发明专利技术利用构件所特有的夹壁墙技术,将所有针对Applet和具有Applet属性的构件对象的接口方法的调用都在夹壁墙中拦截,再将调用的参数和被调用的接口方法信息一起打包,通过投递回调事件的机制向被调用的Applet的消息队列中投递此次调用事件。此时调用线程进入等待状态,当被调用的Applet的消息循环处理到这次调用事件时,由Applet的回调线程执行目标接口方法,执行完成后再将结果返回给等待在夹壁墙的调用线程,再由它返回给调用方的Applet,由此完成一次调用。利用本发明专利技术可以解决Applet彼此调用时多线程问题,加强Applet之间的独立性,使得外界对Applet数据结构的访问和接口方法的调用只能通过Applet自己的线程来完成。

【技术实现步骤摘要】

本专利技术是关于一种计算机构件化软件之间的调用方法,尤其是指构件之间的基于一种线程模型的调用方法及该种线程模型。
技术介绍
每个Applet构件可以看作是一个独立的应用,一个自封闭的运行空间,即便是同 一个进程内的Applets,它们之间的数据也是相对独立的,各自有专属的线程执行各自的代 码,有着清晰的Applet边界。 但是当Applet之间发生调用关系时,比如一个通讯录的Applet可能会调用Email 的Applet来完成"点击通讯录中Email地址直接弹出编辑新邮件"的功能,类似的Applet 之间调用可能还有很多,对于一个Applet来说,如果它的功能实现可能被多个Applet并 发调用,或者说它的代码可能会运行在不同的Applet这中,可能会给Applet实现者造成 诸多难以预计的困难和假设。首先要考虑多线程并发调用的互斥关系,对于一个功能简单 的Applet来说,它可能只需要一个Applet主线程即可完成所有功能,但却要为了防止被其 它Applet调用而考虑多线程问题;再比如,进程内所有线程都属于某个Applet,那么任意 Applet的成员方法里调用Api获得当前Applet的句柄都应该是它所属的Applet,但由于 Applet可能被其它Applet调用,所以它获得的Applet句柄不确定是哪个Applet,如果它 的功能实现方法对此有依赖,处理起来就比较复杂。因此Applet在互相调用存在多线程并 发调用的问题。 其实Applet可以看作一个轻量级的进程。而进程之间的调用过程是这样的跨进 程调用时,发起调用的一方的调用线程等待在被调用一方的进程边界,由被调用一方的进 程内线程完成调用,并将结果返回给调用一方等待中的线程,完成一次跨进程调用。
技术实现思路
鉴于以上内容,有必要提供一种Applet线程模型及基于该线程模型的构件调用 的方法。 所述Applet线程模型包括A卯let构件和具有Applet属性的构件;属于该 Applet构件的消息队列及回调线程。 其中,Applet构件和具有Applet属性的构件都具备夹壁墙和一个Event对象。 所述夹壁墙用来拦截和存放调用方构件的调用请求线程。所述Applet构件用于将调用请 求打包成一个调用消息包,通过投递回调机制将该调用消息包投递到所述消息队列等待处 理;所述回调线程用于当从消息队列接收到该调用消息包时,调用并执行所述目标接口方 法,将执行结果返回给等待在所述构件夹墙壁中的调用请求线程,并激发该构件的Event 对象;所述Event对象用于被回调线程激发后,通知被拦截在所述构件夹壁墙里进行等待 的调用请求线程去获取执行结果以将该执行结果返回给调用方构件。 所述基于该Applet线程模型的构件调用方法包括步骤目标构件利用编译工具 生成打包函数,该打包函数经编译生成DLL可执行文件;创建该目标构件对象,调用方构件 向该创建的目标构件对象发出调用请求;拦截该调用请求并将其存放在目标构件的夹壁 墙,由打包函数将该调用请求打包成一个调用消息包;目标构件对象利用投递回调事件的 机制将上述调用消息包投递到其所属的消息队列中;当消息队列处理到该调用消息包时, 回调线程从该消息队列接收该调用消息包;该回调线程调用并执行所述的目标接口方法, 将执行结果返回给等待在所述夹壁墙里的调用请求,并触发该目标构件对象的Event对 象;该Event对象通知该调用请求去获取返回的执行结果,该调用请求将获取的执行结果 返回给调用方构件。 本专利技术利用构件所特有的夹壁墙技术,将所有针对Applet和具有Applet属性的 构件对象的接口方法的调用,都在夹壁墙中拦截,再将调用的参数和被调用的接口方法的 信息一起打包,通过投递回调事件的机制向被调用的Applet的消息队列中投递此次调用 事件。此时调用线程进入等待状态,当被调用的Applet的消息循环处理到这次调用事件 时,由Applet的回调线程执行目标接口方法,执行完成后再将结果返回给等待在夹壁墙的 调用线程,再由它返回给调用方的Applet,由此完成一次完整的调用。 利用本专利技术可以解决App 1 et彼此调用时多线程问题,加强App 1 et之间的独立性, 使得外界对Applet数据结构的访问和接口方法的调用只能通过Applet自己的线程来完 成。附图说明 图1是本专利技术较佳实施例的线程模型示意图。 图2是本专利技术应用Applet线程模型调用构件目标接口方法的流程图。 具体实施例方式如图1所示,是本专利技术较佳实施例的Applet线程模型1的示意图。需要说明的是 该Applet线程模型1适用于所有的Applet构件和所有被Applet属性修饰的普通构件。 从其他Applet构件或者从"外部"调用一个Applet构件的方法,或者调用一个具 有Applet属性的构件的方法,都会应用Applet线程模型。在本较佳实施例中,将被调用的 Applet构件或具有Applet属性的构件称为目标Applet构件,将调用该目标Applet构件的 其他Applet构件或"外部"的构件称为调用方构件。 所述的Applet线程模型1包括Applet构件/具有Applet属性的构件(也即目 标构件10)、属于该Applet构件/具有Applet属性的构件的消息队列11和回调线程12。 其中每个Applet构件都有属于自己的消息队列11和回调线程12。 其中,每个构件都具备夹壁墙101和一个Event对象102。所述夹壁墙101用来存 放所有调用该构件的调用方的请求线程,也即是说所有调用该构件的调用请求线程都会被 拦截在该构件的夹壁墙101里。 例如用下面的一段程序代码(aa)实现目标构件TMail的夹壁墙101的功能 _TMail: :GetMailer (Mail**ppMailer) 〃夹壁墙函数; { TMailGetMailerParam param ;〃创建一个调用消息包的对象; ECode ec = CEvent: :New(&param. —pEvent);〃创建一个操作系统 Event对象,当这次调用被回调线程处理完以后通过设置这个事件通 知调用者; if(FAILED (ec))return ec ; param. _ec = N0ERR0R ; param. _pThis = this ;〃设置调用参数; param. —ppMailer = ppMailer ;〃设置调用参数; ec = PostCallbackEvent(MAKE_PARAMETER(&_TMail_GetMailer, &param));〃将这次"调用消息包"投递到消息队列; if (FAILED (ec)) {〃如果投递"调用消息包"失败; param. _pEvent_>Release ();〃释放先前创建的对象; return ec ;〃返回错误码; } param._pEvent->Wait (INFINITE);〃无限期等待这个Event对象被 触发,当回调线程处理完这次调用时会触发这个Event ; param. _pEvent_>Release ();〃等待结束,不再需要这个Ev本文档来自技高网
...

【技术保护点】
一种Applet线程模型,其特征在于,该Applet线程模型包括:Applet构件和具有Applet属性的构件;属于该Applet构件的消息队列及回调线程;其中,Applet构件和具有Applet属性的构件都具备夹壁墙和一个Event对象;所述夹壁墙用来拦截和存放调用方构件的调用请求线程;所述Applet构件用于将调用请求打包成一个调用消息包,通过投递回调机制将该调用消息包投递到所述消息队列等待处理;所述回调线程用于当从消息队列接收到该调用消息包时,调用并执行所述目标接口方法,将执行结果返回给等待在所述构件夹墙壁中的调用请求线程,并激发该构件的Event对象;所述Event对象用于被回调线程激发后,通知被拦截在所述构件夹壁墙里进行等待的调用请求线程去获取执行结果以将该执行结果返回给调用方构件。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈榕宋世军
申请(专利权)人:上海科泰世纪科技有限公司
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1