Applet托管对象的方法

文档序号:6482321阅读:253来源:国知局
专利名称:Applet托管对象的方法
技术领域
本发明是关于一种在计算机构件编程时托管对象的方法,尤其是指在通过Applet 线程模型托管对象的方法。
背景技术
Elastos平台上进行CAR构件编程时,通过引用计数管理对象的生命周期,当不再 使用一个对象时,要通过调用Release方法释放对对象的引用。但有的时候所使用的对象 的生命周期要比当前线程还要长,可能在整个Applet的运行过程中都需要访问它,但又只 在Applet内部使用,并且当Applet结束以后就不再需要它。如果创建这个对象的线程是 Applet的主线程(Main),那么可以利用"线程托管对象"的方式将对象托管到Main线程上, 因为Main线程的生命周期与Applet —样,可以保证该对象一直有效。但如果只是在一个 普通线程上创建的对象,这时就比较麻烦,可以将这个对象的指针传递给Main线程,由其 代为管理,或者注册Applet结束事件的回调函数,在回调函数中清理这个对象。但这些手 段对用户来说都比较繁琐,如果要托管的对象很多,又可能由不同线程或者代码,甚至第三 方的代码来创建的等等,都会带来操作复杂、很容易出错。

发明内容
鉴于以上内容,有必要提供一种Applet托管对象的方法。 该Applet托管对象的方法包括步骤在Applet的主线程上创建一个类对象;在 该类对象上实现一个托管对象链表;当Applet创建一个新对象时,将该新对象托管到该创 建它的Applet的主线程上;根据该Applet的句柄将该新对象的指针插入到该托管对象链 表;当Applet运行结束时,释放该类对象,进入该类对象的析构函数;在该类对象的析构函 数里遍历该托管对象链表,并调用所有被托管对象的Release方法。 本发明Applet托管对象的方法提供一个托管API(应用编程接口),用户可以通过 该托管API将对象托管给创建该对象的Applet,当Applet结束退出时自动调用这个对象 的Release方法。利用该方式,用户不必担心对象会被提前释放,也不必实现任何多余的代 码,只需要调用API托管对象即可,具有使用方便、代码清晰简洁、提高程序稳定性的优点。


图1是本发明较佳实施例的Applet托管对象的方法的流程图。 图2是本发明Applet Main线程和类对象CAutoRelease及托管对象链表之间的
关系示意图。
具体实施例方式
如图1所示,是本发明较佳实施例的Applet托管对象的方法的流程图。 步骤S200,在Applet的主线程(Main)上创建一个类对象CAutoRelease,并在该Applet上保留该类对象CAutoRelease的对象指针。该类对象CAutoRelease用于管理被托 管的对象。 步骤S202,在这个创建的类对象CAutoRelease上实现一个托管对象链表。
参照图2所示,其中Mainl是Applet的主线程,类对象CAutoReleaselO是在该 Mainl上创建的用于管理被托管对象的一个类对象CAutoRelease,托管对象链表11是在该 类对象CAutoRelease上实现的一个托管对象链表。 例如用下面一段程序代码(AA)实现上述功能 Class CAutoRelease〃用于管理被托管的对象 {......} Applet TFoo{ Public: CAutoRelease *m_pAutoRelease ;〃在Applet上保留一个 CAutoRelease的对象指针 } TFoo: : AppletRoutine (…)〃Applet的Main线程 { m_pAuRelease = new CAutoRelease ;〃在Applet主线程上创建 —个CAutoRelease对象 ……;〃 执行Applet的其它操作直到准备退出Applet delete m_pAutoRelease ;〃准备退出Applet,清理托管对象 ...... } 通过上述步骤S200和S202,本发明实现了Applet线程上的托管API (Application
Programming Interface,应用编禾呈接口 )。 步骤S204,当Applet创建一个对象时,用户调用所述托管API将这个新创建的对 象托管到该创建它的Applet的主线程上。 步骤S206,用户获得该Applet的句柄。在Elastos平台上,所有的代码都分别运 行于各个Applet,基于Applet的特性,所有运行于Applet内的线程的TLS (Thread Local Storage,线程本地存储或线程局部存储)上都保存着Applet的句柄,因此,用户可以随时 获得Applet的句柄。 步骤S208,根据所获得的Applet的句柄,用户将所创建的对象的指针插入到上述 所实现的托管对象链表中,也即将该所创建的对象托管到了所述CAutoRelease类对象上。
例如可用下面程序段实现将对象插入到托管对象链表上的功能
ECode C0bj ect: : ReleaseAtAppletFinish (PInterface pObject) 〃托管API实
现的伪代码
{ CApplet: :GetCurrent(&pApplet);〃获取当前Applet的句柄 pApplet- > m_pAutoRelease- > GetList (&pList);〃从Applet对象上 获取托管对象链表
4
pList- > Insert (p0bject);〃将托管对象插入链表 return Noerror ; } 步骤S210,当Applet运行结束时,释放类对象CAutoRelease,此时进入该类对象 CAutoRelease的析构函数。析构函数的作用即是当对象生命期结束后,收回对象所占用的 资源。 步骤S212,在该类对象CAutoRelease的析构函数里遍历托管对象链表,并调用所 有被托管对象的Release方法。 例如可用下面一段程序代码实现释放被托管对象的功能 CAutoRelease:: CAutoRelease ()//CAutoRelease的析构函数 { pList = m_pList-First();〃开始遍历托管链表 While (pList) {〃遍历托管对象链表,并释放被托管对象
pList- > GetCurrent (&p0b j);〃获得一个托管对象 p0b j- > Release ();〃释放被托管对象 pList = pList- > Next ();〃继续遍历链表 } Delete m_plist ;〃释放链表资源 } 利用本发明所提供的Applet托管对象的方法,可通过Elastos平台的托管API CObject::ReleaseAtAppletFinish()达到托管对象的目的,如下面一段程序代码段片断所
不 ECode UserRoutine (…) { CFoo: : New (&pFoo); CFoo: :AddFooEventCallback(pFoo, &0nFooEvent);〃注册 FooEvent事^牛的回i周 C0bject: :ReleaseAtAppletFinish(pFoo) ;〃Applet托管API,实现 了对CFoo对象的托管) } ECode TFoo: :Main (…) 〃 某个Applet的Main方法 {CThread: :New(&UserRoutine,…);
Return N0ER0R ; } 从上面的代码段可以看出,线程函数UserRoutine创建一个CFoo对象以后,将这
个对象通过托管API注册给Applet,之后继续其它操作,或者直接退出线程,不需再考虑这 个对象的释放操作。当这个Applet退出时,系统会自动调用CFoo的Release方法,正好对 应CFoo: :New的操作。
如果有多个对象需要被托管,可以反复调用这个托管API。 有了这种托管对象的方式,用户可以通过一个托管API将对象托管给创建该对象 的A卯let,当Applet结束退出时自动调用这个对象的Release方法。利用该方法,用户不 必担心对象会被提前释放,也不必实现任何多余的代码,只需要调用API托管对象即可,具 有使用方便、代码清晰简洁、提高程序稳定性的优点。
权利要求
一种Applet托管对象的方法,其特征在于,该方法包括在Applet的主线程上创建一个类对象;在该类对象上实现一个托管对象链表;当Applet创建一个新对象时,将该新对象托管到该创建它的Applet的主线程上;根据该Applet的句柄将该新对象的指针插入到该托管对象链表;当Applet运行结束时,释放该类对象,进入该类对象的析构函数;在该类对象的析构函数里遍历该托管对象链表,并调用所有被托管对象的Release方法。
2. 如权利要求1所述的Applet托管对象的方法,其特征在于,该方法还包括步骤 获得该Applet的句柄。
3. 如权利要求2所述的Applet托管对象的方法,其特征在于,所述Applet的句柄保存 在运行于该Applet内的线程的TLS上。
4. 如权利要求1所述的Applet托管对象的方法,其特征在于,所述托管对象链表用于 存储被托管对象的指针。
5. 如权利要求1所述的Applet托管对象的方法,其特征在于,所述创建的类对象用于 管理被托管的对象。
6. 如权利要求1所述的Applet托管对象的方法,其特征在于,所述创建的类对象为 CAutoRelease。
全文摘要
本发明提供一种Applet托管对象的方法,该方法包括在Applet的主线程上创建一个类对象;在该类对象上实现一个托管对象链表;当Applet创建一个新对象时,将该新对象托管到该创建它的Applet的主线程上;根据该Applet的句柄将该新对象的指针插入到该托管对象链表;当Applet运行结束时,释放该类对象,进入该类对象的析构函数;在该类对象的析构函数里遍历该托管对象链表,并调用所有被托管对象的Release方法。本发明提供一个托管API,用户可以通过该托管API将对象托管给创建该对象的Applet,当Applet结束退出时自动调用这个对象的Release方法。利用该方式,用户不必担心对象会被提前释放,也不必实现任何多余的代码,只需调用API托管对象即可。
文档编号G06F9/44GK101788905SQ20091004592
公开日2010年7月28日 申请日期2009年1月22日 优先权日2009年1月22日
发明者宋世军, 陈榕 申请人:上海科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1