书签 分享 收藏 举报 版权申诉 / 8

APPLET托管对象的方法.pdf

  • 上传人:Y0****01
  • 文档编号:1070243
  • 上传时间:2018-03-29
  • 格式:PDF
  • 页数:8
  • 大小:267.99KB
  • 摘要
    申请专利号:

    CN200910045926.1

    申请日:

    2009.01.22

    公开号:

    CN101788905A

    公开日:

    2010.07.28

    当前法律状态:

    驳回

    有效性:

    无权

    法律详情:

    发明专利申请公布后的驳回IPC(主分类):G06F 9/44申请公布日:20100728|||实质审查的生效IPC(主分类):G06F 9/44申请日:20090122|||公开

    IPC分类号:

    G06F9/44; G06F9/46

    主分类号:

    G06F9/44

    申请人:

    上海科泰世纪科技有限公司

    发明人:

    宋世军; 陈榕

    地址:

    201203 上海市张江高科技园区碧波路177号华虹科技园C区4层

    优先权:

    专利代理机构:

    代理人:

    PDF完整版下载: PDF下载
    内容摘要

    本发明提供一种Applet托管对象的方法,该方法包括:在Applet的主线程上创建一个类对象;在该类对象上实现一个托管对象链表;当Applet创建一个新对象时,将该新对象托管到该创建它的Applet的主线程上;根据该Applet的句柄将该新对象的指针插入到该托管对象链表;当Applet运行结束时,释放该类对象,进入该类对象的析构函数;在该类对象的析构函数里遍历该托管对象链表,并调用所有被托管对象的Release方法。本发明提供一个托管API,用户可以通过该托管API将对象托管给创建该对象的Applet,当Applet结束退出时自动调用这个对象的Release方法。利用该方式,用户不必担心对象会被提前释放,也不必实现任何多余的代码,只需调用API托管对象即可。

    权利要求书

    1: 一种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线程模型托管对象的方法。

        背景技术

        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所示,其中Main1是Applet的主线程,类对象CAutoRelease10是在该Main1上创建的用于管理被托管对象的一个类对象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 CObj ect::ReleaseAtAppletFinish(PInterface pObject)//托管API实现的伪代码

        {

            CApplet::GetCurrent(&pApplet);//获取当前Applet的句柄

            pApplet->m_pAutoRelease->GetList(&pList);//从Applet对象上

        获取托管对象链表

            pList->Insert(pObject);//将托管对象插入链表

            return Noerror;

            }

        步骤S210,当Applet运行结束时,释放类对象CAutoRelease,此时进入该类对象CAutoRelease的析构函数。析构函数的作用即是当对象生命期结束后,收回对象所占用的资源。

        步骤S212,在该类对象CAutoRelease的析构函数里遍历托管对象链表,并调用所有被托管对象的Release方法。

        例如可用下面一段程序代码实现释放被托管对象的功能:

        CAutoRelease::~CAutoRelease()//CAutoRelease的析构函数

        {

            pList=m_pList-First();//开始遍历托管链表

            While(pList){//遍历托管对象链表,并释放被托管对象

                pList->GetCurrent(&pObj);//获得一个托管对象

                pObj->Release();//释放被托管对象

                pList=pList->Next();//继续遍历链表

            }

              Delete m_plist;//释放链表资源

          }

        利用本发明所提供的Applet托管对象的方法,可通过Elastos平台的托管API CObject::ReleaseAtAppletFinish()达到托管对象的目的,如下面一段程序代码段片断所示:

        ECode UserRoutine(…)

        {

            CFoo::New(&pFoo);

            CFoo::AddFooEventCallback(pFoo,&OnFooEvent);//注册

        FooEvent事件的回调

            CObject::ReleaseAtAppletFinish(pFoo);//Applet托管API,实现

        了对CFoo对象的托管)

        }

        ECode TFoo::Main(…)//某个Applet的Main方法

        {

          CThread::New(&UserRoutine,…);

          Return NOEROR;

        }

        从上面的代码段可以看出,线程函数UserRoutine创建一个CFoo对象以后,将这个对象通过托管API注册给Applet,之后继续其它操作,或者直接退出线程,不需再考虑这个对象的释放操作。当这个Applet退出时,系统会自动调用CFoo的Release方法,正好对应CFoo::New的操作。

        如果有多个对象需要被托管,可以反复调用这个托管API。

        有了这种托管对象的方式,用户可以通过一个托管API将对象托管给创建该对象的Applet,当Applet结束退出时自动调用这个对象的Release方法。利用该方法,用户不必担心对象会被提前释放,也不必实现任何多余的代码,只需要调用API托管对象即可,具有使用方便、代码清晰简洁、提高程序稳定性的优点。

    关 键  词:
    APPLET 托管 对象 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:APPLET托管对象的方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-1070243.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1