CN101770393B - Applet构件模型及其应用方法 - Google Patents

Applet构件模型及其应用方法 Download PDF

Info

Publication number
CN101770393B
CN101770393B CN 200810208051 CN200810208051A CN101770393B CN 101770393 B CN101770393 B CN 101770393B CN 200810208051 CN200810208051 CN 200810208051 CN 200810208051 A CN200810208051 A CN 200810208051A CN 101770393 B CN101770393 B CN 101770393B
Authority
CN
China
Prior art keywords
applet
thread
component
handle
main
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 200810208051
Other languages
English (en)
Other versions
CN101770393A (zh
Inventor
陈榕
宋世军
牛靖宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Original Assignee
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI filed Critical KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority to CN 200810208051 priority Critical patent/CN101770393B/zh
Publication of CN101770393A publication Critical patent/CN101770393A/zh
Priority to HK10109886.6A priority patent/HK1143439A1/xx
Application granted granted Critical
Publication of CN101770393B publication Critical patent/CN101770393B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

一种Applet构件模型包括Applet构件、调用者和回调构件。当调用者调用Applet构件时,首先进入夹壁墙代码,并在夹壁墙内将当前线程上的Applet句柄自动切换到Applet构件上,并调用Start方法创建一个主线程;在Applet构件的内部线程注册其它构件对象的回调事件,注册时获取当前线程上的Applet句柄并传递给回调构件,当回调构件激发目标事件通知时,调用回调函数执行目标事件,并向Applet构件的消息队列投递消息;主线程调用Main方法执行Applet应用程序,如果Main方法返回的结果没有错误,则主线程进入消息循环处理由消息,否则退出Applet应用程序。实施本发明,可以让不同应用程序彼此独立地运行在同一个进程里,避免操作系统在各个进程之间频繁地切换进行资源分配。

Description

Applet构件模型及其应用方法
技术领域
本发明涉及一种构件模型及其应用方法,特别是关于一种Applet构件模型及其应用方法。
背景技术
进程是操作系统中资源分配和运行的基本单元,通常每个进程运行一个应用程序,各个相互独立的应用程序被加载到专属的进程独立运行,互不干扰。但随着运行进程数量的增加,操作系统要频繁地在各个进程之间切换,每次都要保存和恢复进程上下文、换进换出内存页面等等,这种代价是显而易见的。如果为了避免这种进程的切换,也可以将各应用都加载到同一个进程,这可以获得最大的效率。但当很多应用运行在一个进程空间时,很难分辨哪个线程属于哪个应用、哪个资源正在被哪个应用访问等,会带来应用管理上的困难和混乱,应用之间不再具有进程之间清晰的界限。显而易见,这种方式可以获得比较高的效率,但也带来一个新问题,所有线程都跑在一起,没有一个明显的边界和空间,因此应用之间不再具有清晰界限和独立性。
Applet构件类似于一个轻进程,Applet构件内部可以有一个或多个线程来运行程序,这些线程和它们的子线程都被设置标记,标示属于这某个Applet构件。Applet构件通常代表一个独立的、完整的应用,借助Applet构件的夹壁墙和被标示过的线程实现一个虚拟的边界和运行空间,因此跨越Applet构件边界的调用类似于跨越进程边界的调用。如果进程可以被看作由各种资源、访问/执行权限、边界和线程组成的一个运行空间,那么Applet构件就可以看作是进程的子集,进程内的Applet构件分享着进程的资源、继承若干访问权限、包含一个或多个专属线程以及Applet构件之间的边界。由于操作系统已把进程作为资源分配的基本单元,进程之间不能嵌套或重叠,因此Applet构件就可以实现在进程内进一步划分资源,管理线程。
发明内容
鉴于以上内容,有必要提供一种Applet构件模型及其应用方法,可以让不同应用程序彼此独立地运行在同一个进程空间,避免操作系统在各个进程之间频繁地切换进行资源分配。
一种Applet构件模型包括Applet构件、调用者以及回调构件。所述的Applet构件包括内部线程和构件对象,该构件对象包括消息队列、Main方法以及Applet接口方法。调用者通过调用Applet接口方法的Start方法启动Applet构件,并在Start方法里创建一个新线程作为执行该Applet构件的主线程;当Applet构件的外部线程调用Applet构件时,首先进入夹壁墙并在夹壁墙内将当前线程上的Applet句柄自动切换到被调用的Applet构件上,然后执行被调用的Applet接口方法,当调用结束返回时返回夹壁墙并在夹壁墙内将Applet句柄切换回调用者;当Applet构件的内部线程向回调构件注册事件通知时,自动获取当前线程上的Applet句柄并传递给回调构件;当回调构件激发所注册的事件通知时,回调函数向注册这个事件通知的Applet构件的消息队列投递消息;Applet主线程调用Main方法执行Applet应用程序,如果Main方法返回的结果没有错误,则主线程进入消息循环来处理投递到消息队列的消息,否则退出Applet应用程序。
一种Applet构件应用方法,该方法包括步骤:实例化一个Applet构件,该Applet构件包括内部线程和构件对象,该构件对象包括消息队列、Main方法、Applet接口方法和回调函数;调用者通过调用Applet接口方法的Start方法启动Applet构件,并在Start方法里创建一个新线程作为执行该Applet构件的主线程;当Applet构件的外部线程调用Applet构件时,将当前线程上的Applet句柄自动切换为被调用的Applet构件上,然后执行被调用的Applet接口方法,当调用结束返回时返回夹壁墙并在夹壁墙内将当前线程上的Applet句柄切换回调用者;当Applet构件的内部线程向回调构件注册事件通知时,自动获取当前线程上的Applet句柄并传递给回调构件;当回调构件激发所注册的事件通知时,Applet构件的回调函数向注册这个事件通知的Applet构件的消息队列投递消息;Applet主线程调用Main方法执行Applet应用程序,并判断Main方法返回的结果是否有错误;如果Main方法返回的结果没有错误,则Applet主线程进入消息循环并调用回调函数处理投递到消息队列的消息;如果Main方法返回的结果有错误,则Applet主线程清理消息队列资源并退出Applet应用程序。
相较于现有技术,本发明Applet构件模型及其应用方法是基于Applet面向接口的构件编程技术之上的,具有面向接口和构件编程的所有优势,比如数据类型安全、接口自描述、自动打包等等。同时,相比进程,Applet构件只是一个逻辑概念,操作系统不会也不需要在Applet构件之间进行切换,也就没有如切换进程的消耗。此外,对于需要把多个应用放入一个进程运行的用户来说,不必再自己管理应用的线程、数据对象等细节。用户可以将不同的应用通过对应的Applet构件来实现,每个应用自己负责自己的Applet构件,在Applet构件内分配资源、管理内存,自己处理自己的消息回调。因此,不同应用虽然被运行在同一个进程空间,但却彼此独立,可以避免多进程之间的切换代价,具有逻辑上的独立性。
附图说明
图1是本发明较佳实施例Applet构件模型的示意图。
图2是Applet构件的内部线程和构件对象的示意图。
图3是本发明较佳实施例Applet构件应用方法的主流程图。
图4是Applet主线在创建子线程时传递Applet句柄的流程图。
图5是Applet主线创建子线程时带有各自Applet句柄的示意图。
图6是Applet主线程创建构件对象并保存其所属Applet构件的流程图。
图7是调用构件对象并自动切换线程TLS为对象所属Applet构件的流程图。
图8是Applet主线程运行Applet构件后处理消息循环的方法流程图。
具体实施方式
如图1所示,是本发明Applet构件模型的示意图。该Applet构件模型包括:Applet构件10、调用者20及回调构件30。当一个进程1运行时,该进程1可能执行Applet构件10、调用者20、回调构件30,每个构件都可以看作是一个被进程1执行的Applet应用程序。所述的Applet构件10包括内部线程和构件对象,该构件对象包括消息队列、Main方法、Applet接口方法以及回调函数。所述的调用者20位于Applet构件10的外部,其可以是一种具有Applet属性的构件、其他普通构件或者普通线程。所述的回调构件30可以位于Applet构件10的内部、也可以位于Applet构件10的外部,或者位于其它进程里。在本实施例中,回调构件30位于Applet构件10的外部,Applet构件10利用夹壁墙100把调用者20、回调构件30分隔开来,从而使得每个Applet应用自己负责自己对应的构件。
当调用者20调用Applet构件10时,首先进入夹壁墙,并在夹壁墙100内将当前线程TLS(Thread Local Storage,本地存储空间)上的Applet句柄自动切换到Applet构件10上,调用IApplet接口方法中的IApplet::Start函数,并在Start方法里创建一个新线程作为执行该Applet构件10的主线程。每个Applet构件10都默认实现了一个IApplet接口方法,实现IApplet接口方法采用如下示例代码(b1):
interface IApplet{
   Start([in]BufferOf<WString>args);
   Finish(AppletFinish Flag);
   GetName([out]WStringBuf_<256>name);
   WaitUntilFinished([in]Milliseconds32timeout,[out]WaitResult*result);
   GetStatus([out]AppletStatus*status);
}
enum AppletFinish{
  AppletFinish_Nice=0x01,
  AppletFinish_ASAP,
  AppletFinish_immediately,
}
enum AppletStatus{
  AppletStatus_Created=0x01,
  AppletStatus_Starting,
  AppletStatus_Idling,
  AppletStatus_Working,
  AppletStatus_Snoozing,
  AppletStatus_Finishing,
  AppletStatus_Deceased,
}
调用者20调用IApplet::Start函数是一个异步调用,在Start方法里会创建Applet构件10的主线程,创建成功后立即返回,主线程将继续初始化Applet构件10,并在主线程里调用Applet构件10的入口函数Main方法。如果Main方法返回的结果没有错误(NOERROR),则主线程进入消息循环,并调用回调函数来处理由消息队列投递来的消息;否则,结束并退出Applet应用程序。当用户想结束Applet应用时,可以调用IApplet::Finish方法通知Applet构件10的回调处理,并结束回调函数处理的消息循环,Applet构件10的主线程开始清理消息队列的的资源,准备退出。
当Applet构件10的外部线程调用Applet构件10时,在夹壁墙里将当前线程上的Applet句柄自动切换为被调用的Applet构件10上,然后执行被调用的Applet接口方法,当调用结束返回时,在夹壁墙100里将当前线程上的Applet句柄切换回调用者20。当Applet构件的内部线程向回调构件注册事件通知时,自动获取当前线程上的Applet句柄并传递给回调构件30。当回调构件30激发所注册的事件通知时,Applet构件10的回调函数向注册这个事件通知的Applet构件10的消息队列投递消息。
当一个事件发生时,管理回调关系的回调构件30会向Applet构件10的消息队列里激发这个事件通知。因此,在注册回调事件时预先设置好处理回调事件的应用构件(例如回调构件30),只有这样才能在目标事件发生时知道该向哪个应用构件投递事件。为此,当调用AddCallback方法时自动获取当前线程TLS上的Applet句柄,并传递给回调构件30(例如Sink对象),当这个事件发生时,通过回调构件30投递一个异步消息到消息队列中。以下举一个FooEvent的回调事件(亦即AddFooEventCallback)来说明AddCallback方法,其采用如下示例代码(b2)来实现:
CFoo::AddFooEventCallback(PInterface pServer,Void pFunc)
{
  ICallbackSink*pSink=ICallbackSink::Probe(pServer);
  IApplet*pApplet;
  CThread::GetTlsObject(TLS_APPLET,&pApplet);
  pSink->AddCallback(FooEvent_Id,pFunc,pApplet);
}
如图2所示,是Applet构件10的内部线程和构件对象的示意图。Applet构件10被创建以后,通过IApplet::Start方法创建Applet构件10的主线程。由这个主线程所创建的所有子线程都具有一个标示这个Applet构件10的标志(ID),因此这些具有该标志ID的线程被称为Applet构件10的内部线程。由Applet构件10的内部线程运行时所创建的普通构件对象也同样继承Applet构件10的标志ID,因此这些构件对象称为Applet的内部构件对象。
通过Applet构件10的内部线程和构件对象,可以将进程1内的线程和对象划分为不同的Applet构件10,每个Applet构件10可以看作是这些线程和对象的集合。任意两个Applet之间的交集为空,所有Applet构件10的并集是进程1的子集。为了进程1内的资源管理上的便利和明确回调事件由谁处理,每个Applet构件10都明确划分了Applet边界。由于每个Applet构件10都是一个相互独立的应用,因此Applet构件10自己的事件回调应该由Applet构件10自己的消息线程来处理。
明确了线程和对象所属的Applet构件10,也就明确了Applet构件10的边界或者说作用域。在本实施例中,Applet构件10的内部线程是Applet构件10运行时的动态作用域,而构件对象是Applet构件10的静态作用域。Applet构件10的内部线程是动态作用域,是因为只有在运行时才能决定这个线程属于哪个Applet构件10,甚至有时要运行时才能决定线程会执行和调用哪些函数。所有被这个线程调用执行的代码都算是运行在当前的Applet应用环境中,如果这个过程中有注册回调事件,当这个回调事件发生时,会投递到注册时所在的Applet构件10的回调事件队列,并由该Applet构件10的回调处理线程来完成回调函数的调用。而Applet构件10的构件对象被称为静态作用域,是因为构件对象所属的Applet构件10在其被创建时就固定下来了,并且无论这个构件对象的接口方法在何处调用执行,构件方法的实现里所注册的回调事件都是由创建该构件的Applet对象来负责接收和处理。上面所说的构件对象都是指普通的构件对象,如果是一个Applet对象,它不属于任何Applet构件10,或者说它属于它自己,无论它是被谁、在哪里创建都是如此。
如图3所示,是本发明较佳实施例Applet构件10应用方法的主流程图。步骤S10,进程1调用Applet的New方法实例化一个Applet构件10。步骤S20,当调用者20调用Applet构件时,进程1内的调用者20调用Applet构件10的IApplet::Start方法启动这个Applet构件10。具体地,当Applet构件的外部线程调用Applet构件10时,首先进入夹壁墙,并在夹壁墙100里将当前线程上的Applet句柄自动切换到被调用的Applet构件10上,然后执行被调用的Applet接口方法,当调用结束返回时,在夹壁墙100里将当前线程上的Applet句柄切换回调用者。
步骤S30,调用该Start方法创建一个新线程作为执行该Applet构件10的主线程。步骤S40,主线程执行Applet构件10的Main方法。具体地,当Applet构件10的内部线程向回调构件30注册事件通知时,自动获取当前线程上的Applet句柄并传递给回调构件30。当回调构件30激发所注册的事件通知时,Applet构件10的回调函数向注册这个事件通知的Applet构件的消息队列投递消息。
步骤S50,主线程判断Main方法是否返回NOERROR。如果Main方法返回NOERROR,主线程则进入Applet的消息循环,并处理消息队列中的消息事件(步骤S60),具体步骤请参阅图8中进行描述。如果Main方法没有返回NOERROR,主线程清理消息队列并退出Applet应用(步骤S70)。
如图4所示,是Applet主线程在创建子线程时传递Applet句柄的流程图,其包括如下步骤:进程1读取当前线程TLS上的Applet句柄(步骤S41);Applet主线程创建子线程(步骤S42);在操作系统内核中将父线程TLS上的Applet句柄复制到子线程的TLS上(步骤S43);操作系统创建并运行子线程,其TLS上的Applet句柄与父线程相同(步骤S44)。由此可知,进程1最初只有一个主线程,再由主线程创建若干Applet,Applet内部又会创建子线程,Applet主线程的Applet句柄是一个特殊的值,它创建的子线程也继承这个值;Applet主线程的Applet句柄会传递给所有Applet的内部线程。这样,进程内所有线程的TLS上都具有了所属的Applet句柄。
如图5所示,是进程1在创建子线程时带有各自Applet句柄的示意图。进程1中的主线程Applet A和Applet B在创建子线程时会带有各自的Applet句柄。Applet主线程的TLS上记录着本身的句柄,并且保证所有被创建的子线程继承父线程的Applet句柄。进程1最初只有一个主线程,再由主线程创建若干Applet,Applet内部又会创建子线程,主线程的Applet句柄是一个特殊的值,它创建的子线程也继承这个值;Applet主线程的Applet句柄会传递给所有Applet内的线程。这样,进程内所有线程的TLS上都具有所属的Applet句柄。
如图6所示,是Applet主线程创建构件对象并保存其所属Applet句柄的流程图,其包括如下步骤:调用者20调用构件对象的New方法创建构件对象(步骤S61);在New方法里获得当前线程TLS上的Applet句柄(步骤S62);在New方法里通过构件对象的成员变量保存Applet句柄(步骤S63)。由此可知,所有构件对象都有一个成员保存所属Applet的句柄,Applet构件对象保存的Applet句柄是自己。当构件对象被创建时,从当前线程的TLS上获得Applet的句柄。所述的进程创建构件对象并保存其所属Applet句柄采用如下示例代码(b3)来实现:
Class CFoo{
  CFoo(){
  CThread::GetTlsObject(TLS_APPLET,&_m_pOwnApplet);
}
Private:
  IApplet*_m_pOwnApplet;
}
ECode UserFunc()
{
 IFoo*pFoo;
 CFoo::New(&pFoo);
 printf(“CFoo._m_pOwnApplet=0x%x\n”,pFoo);
}
AppletA::Main()
{
  printf(“Applet A:0x%x\n”,this);
  CThread::New(&UserFunc,…);
}
AppletB::Main()
{
  printf(“Applet B:0x%x\n”,this);
  CThread::New(&UserFunc,…);
}
由上面的示例代码(b3)里,创建对象时,当前线程TLS上的Applet句柄会被构件对象继承并保存在成员变量上。
如图7所示,是调用构件对象并自动切换线程TLS为对象所属Applet构件10的流程图。该切换方法包括如下步骤:调用者20创建一个构件对象(步骤S71);进入构件对象的夹壁墙100(步骤S72);获得当前线程TLS上的Applet句柄(步骤S73);将当前线程TLS上的Applet句柄切换为该对象所属的Applet构件10(步骤S74);调用用户实现的构件对象的方法(步骤S75);调用结束后将当前线程TLS上的Applet句柄切换回调用者20(步骤S76)。该切换方法采用以下示例代码(b4)来实现:
_CFoo::Foo()//Foo方法的夹壁墙
{
  IApplet*pOrgApplet;
  CThread::GetTlsObj ect(TLS_APPLET,&pOrgApplet);
  CThread::SetTlsObject(TLS_APPLET,_m_pOwnApplet);
  ec=CFoo::Foo();
  CThread::SetTlsObject(TLS_APPLET,pOrgApplet);
}
CFoo::Foo()
{
  IApplet*pCurrApplet;
  CThread::GetTlsObject(TLS_APPLET,&pCurrApplet);
  printf(“CFoo::Foo:Current Applet=0x%x\n”,pCurrApplet);
}
IFoo*g_pIFoo;
Applet::Main()
{
  printf(“Applet is 0x%x\n”,this);
  CFoo::New(&g_pIFoo);
}
ECode UserFunc(PVoid pParam)
{
  IFoo*pFoo=g_PIFoo;
  IApplet*pCurrApplet:
  CThread::GetTlsObject(TLS_APPLET,& pCurrApplet);
  printf(“UserFunc:Current Applet=0x%x\n”,pCurrApplet);
  pFoo->Foo();
}
在上面的示例代码(b4)里,一个线程里调用另一个线程创建的对象,虽然Foo方法在UserFunc这个线程里被调用,但经过构件对象的夹壁墙100时,当前线程TLS上的Applet句柄会被自动切换到该被调用时所属的Applet构件10。
如图8所示,是Applet主线程运行Applet构件10后处理消息循环的方法流程图。该消息循环处理方法包括如下步骤:主线程等待处理新事件(步骤S81);Applet主线程判断Applet构件10中是否有退出标志(步骤S82);当没有退出标志时,Applet主线程从消息队列获得一个新事件(步骤S83);主线程处理回调事件,当回调事件处理完毕后返回步骤S81继续等待处理新事件直到Applet构件10中有退出标志(步骤S84)。在步骤S82中,如果Applet构件10中有退出标志,则Applet主线程清理消息队列资源并退出Applet应用程序。由此可知,Applet主线程结束后进入回调事件处理的消息循环,直到用户调用Finish方法时退出消息循环。所述的Applet主线程处理消息循环的方法采用如下示例代码(b5)实现:
ECode TFoo::AppletRoutine(PVoid pParam)
{
  TFoo*pThis=(TFoo*)pParam;
  ECode ec=pThis->TFoo::Main(…);
  if(FAILED(ec))return ec;
    pThis->TFoo::CallbackRoutine();
    return NOERROR;
}
ECode TFoo::Finish()
{
  m_bFinish=TRUE;
  SetEvent();
  return NOERROR;
}
ECode TFoo::CallbackRoutine()
{
  while(m_bFinish==FALSE){
  wr=WaitForEvent();
  if(wr==S_OK){
  pMsg=GetMsg();
  pMsg->CailbackFunc();
  delete pMsg;}
}
本发明通过Applet构件模型所创建对象和子线程传递Applet句柄信息,构建了一个Applet运行空间。在这个空间里,Applet负责事件回调的处理,可以完成对象和线程的管理,可以与其他Applet的对象和线程明显地划分开来,从而在进程内实现了一种类似于轻进程的运行空间和资源分配、管理单元。

Claims (8)

1.一种Applet构件应用方法,其特征在于,该方法包括步骤:
实例化一个Applet构件,该Applet构件包括内部线程和构件对象,该构件对象包括消息队列、Main方法、Applet接口方法以及回调函数;
调用者通过调用Applet接口方法的Start方法启动Applet构件,并在Start方法里创建一个新线程作为执行该Applet构件的主线程;
当Applet构件的外部线程调用Applet构件时,首先进入夹壁墙,并在夹壁墙内将当前线程上的Applet句柄自动切换为被调用的Applet构件,然后执行被调用的Applet接口方法,当调用结束返回时返回夹壁墙,并在夹壁墙内将当前线程上的Applet句柄切换回调用者;
当Applet构件的内部线程向回调构件注册事件通知时,自动获取当前线程上的Applet句柄并传递给回调构件;
当回调构件激发所注册的事件通知时,Applet构件的回调函数向注册该事件通知的Applet构件的消息队列投递消息;
Applet主线程调用Main方法执行Applet应用程序,并判断Main方法返回的结果是否有错误;
如果Main方法返回的结果没有错误,则Applet主线程进入消息循环并调用回调函数处理投递到消息队列的消息;
如果Main方法返回的结果有错误,则Applet主线程清理消息队列资源并退出Applet应用程序。
2.如权利要求1所述的Applet构件应用方法,其特征在于,该方法还包括如下步骤:
创建Applet构件的子线程;
读取父线程上的Applet句柄;
在操作系统内核中将父线程上的Applet句柄复制到子线程上;
运行被创建的子线程,该子线程上的Applet句柄与父线程上的Applet句柄相同。
3.如权利要求1所述的Applet构件应用方法,其特征在于,该方法还包括如下步骤:
调用构件对象的New方法创建Applet构件的内部构件对象;
在New方法里获得当前线程上的Applet句柄;
在New方法里通过Applet构件的内部构件对象的成员变量保存该内部构件对象所属的Applet句柄。
4.如权利要求1所述的Applet构件应用方法,其特征在于,所述的在夹壁墙内切换当前线程上的Applet句柄的步骤包括:
调用者通过Applet接口方法创建一个构件对象;
进入该构件对象的夹壁墙;
获得当前线程上的Applet句柄;
将当前线程上的Applet句柄切换为该构件对象所属的Applet构件;
调用用户实现该构件对象的方法;
调用结束后将当前线程上的Applet句柄切换回调用者。
5.如权利要求1所述的Applet构件应用方法,其特征在于,所述的Applet主线程进入消息循环并调用回调函数处理投递到消息队列的消息的步骤包括:
Applet主线程等待处理新事件;
Applet主线程判断Applet构件中是否有退出标志;
如果Applet构件中没有退出标志,则Applet主线程从消息队列获得一个新事件并通过回调函数处理该事件,当回调处理完毕后继续等待处理新事件直到Applet构件中有退出标志;
如果Applet构件中有退出标志,则Applet主线程结束处理消息循环,清理消息队列资源并退出Applet应用程序。
6.如权利要求1所述的Applet构件应用方法,其特征在于,所述的Applet构件利用夹壁墙把运行在同一进程内的调用者和回调构件分隔开。
7.如权利要求6所述的Applet构件应用方法,其特征在于,所述的调用者为具有Applet属性的构件、普通构件、或者普通线程之一种,所述的回调构件为具有Applet属性的构件、普通构件、或者普通线程之一种。
8.如权利要求1所述的Applet构件应用方法,其特征在于,所述的Applet构件的内部线程是Applet构件运行时的动态作用域,而构件对象是Applet构件运行时的静态作用域。
CN 200810208051 2008-12-29 2008-12-29 Applet构件模型及其应用方法 Expired - Fee Related CN101770393B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN 200810208051 CN101770393B (zh) 2008-12-29 2008-12-29 Applet构件模型及其应用方法
HK10109886.6A HK1143439A1 (en) 2008-12-29 2010-10-19 Applet component models and a method of implementing thereof applet

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200810208051 CN101770393B (zh) 2008-12-29 2008-12-29 Applet构件模型及其应用方法

Publications (2)

Publication Number Publication Date
CN101770393A CN101770393A (zh) 2010-07-07
CN101770393B true CN101770393B (zh) 2013-06-05

Family

ID=42503272

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200810208051 Expired - Fee Related CN101770393B (zh) 2008-12-29 2008-12-29 Applet构件模型及其应用方法

Country Status (2)

Country Link
CN (1) CN101770393B (zh)
HK (1) HK1143439A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102654840A (zh) * 2011-11-30 2012-09-05 天津书生投资有限公司 一种函数回调的方法和系统
CN102647429A (zh) * 2012-04-28 2012-08-22 杭州格畅科技有限公司 应用间通信的访问控制方法、应用进程管理器、在线应用平台
CN106383749A (zh) * 2016-09-14 2017-02-08 郑州云海信息技术有限公司 一种线程管理方法及装置
CN109660569B (zh) * 2017-10-10 2021-10-15 武汉斗鱼网络科技有限公司 一种多任务并发执行方法、存储介质、设备及系统
CN107945430B (zh) * 2017-11-24 2021-09-14 上海动联信息技术股份有限公司 一种用于智能pos机的基于串口的双向并发通讯方法
CN114238997B (zh) * 2022-02-23 2022-05-10 国汽智控(北京)科技有限公司 基于车辆应用权限的资源调用方法、装置和电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1514353A (zh) * 2002-12-31 2004-07-21 北京科泰世纪科技有限公司 基于动态内核实现跨地址空间创建构件对象的方法
CN1519712A (zh) * 2003-01-22 2004-08-11 北京科泰世纪科技有限公司 基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法
CN1889048A (zh) * 2006-08-03 2007-01-03 华为技术有限公司 组件的实现方法以及系统
CN101118497A (zh) * 2007-09-20 2008-02-06 金蝶软件(中国)有限公司 一种类装载处理的方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1514353A (zh) * 2002-12-31 2004-07-21 北京科泰世纪科技有限公司 基于动态内核实现跨地址空间创建构件对象的方法
CN1519712A (zh) * 2003-01-22 2004-08-11 北京科泰世纪科技有限公司 基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法
CN1889048A (zh) * 2006-08-03 2007-01-03 华为技术有限公司 组件的实现方法以及系统
CN101118497A (zh) * 2007-09-20 2008-02-06 金蝶软件(中国)有限公司 一种类装载处理的方法及装置

Also Published As

Publication number Publication date
CN101770393A (zh) 2010-07-07
HK1143439A1 (en) 2010-12-31

Similar Documents

Publication Publication Date Title
CN101770393B (zh) Applet构件模型及其应用方法
KR101116615B1 (ko) 자바 가상 머신 상에서 이뤄지는 애플리케이션 및 스레드의자원 관리 시스템 및 방법
CN106021399A (zh) 查询请求消息的处理方法及装置
EP1465063A2 (en) Enhanced runtime hosting
EP3913859A1 (en) Vnf life cycle management method and apparatus
CN103744723B (zh) 一种线程池的管理方法和管理系统
CN102317914B (zh) 虚拟资源管理方法、系统及装置
CN102063338A (zh) 一种请求独占资源的方法及装置
CN105975327A (zh) 在虚拟环境下减小虚拟机的抢占的方法和计算机系统
US7865914B2 (en) Cooperative DLL unload
CN111953503B (zh) Nfv资源部署编排方法和网络功能虚拟化编排器
CN111831434A (zh) 资源分配方法、装置、存储介质及电子设备
CN101770395A (zh) Applet线程模型及基于Applet线程模型的调用构件的方法
US7565385B2 (en) Embedded garbage collection
CN105573842B (zh) 在应用程序中进行进程回收处理的方法及装置
CN105468438B (zh) 在应用程序中进行进程回收处理的方法及装置
CN108170505A (zh) 一种驱动管理方法及宿主机
CN110852680A (zh) 数据处理方法、erp系统及计算机存储介质
EP2945054A1 (en) Apparatus for managing application program and method therefor
CN105607953B (zh) 在应用程序中进行进程回收处理的方法及装置
CN112631685A (zh) 一种类加载方法及装置
CN112596774B (zh) 一种实例化软件管理方法及装置
CN112905267B (zh) 虚拟机接入协程库的方法、装置及设备
CN110321175B (zh) 一种控制器初始化方法及相关装置
US20080271031A1 (en) Resource Partition Management in Kernel Space

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1143439

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1143439

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130605

Termination date: 20151229

EXPY Termination of patent right or utility model