实现函数托管的方法和数据处理设备的制作方法

文档序号:6482595阅读:192来源:国知局
专利名称:实现函数托管的方法和数据处理设备的制作方法
技术领域
本发明涉及一种实现函数管控的方法和设备,特别是涉及一种实现函数托管的方 法和数据处理设备。
背景技术
随着计算机软件技术的不断发展,构件化软件技术已经越来越普及,各种各样的 构件技术和支持这些构件技术的相应的嵌入式操作系统也应运而生。目前,人们在利用构件化软件系统平台进行编程时,例如,在上海科泰世纪科技有 限公司开发的Elastos平台上进行编程时,可能希望得到进程退出的通知,以在进程退出 进入准备结束状态时做些资源清理的工作,或者在进程退出进入准备结束状态时需要设置 一些标志、发送消息通知等等,然而,要实现上述目的还存在如下的问题问题一虽然说主线程退出就代表着进程退出,但这存在两个约束。第一、主线程 退出时返回的只是进入主线程的消息循环,并不表示当前进程或者主线程已经结束退出, 当进入消息循环以后就离开了用户的代码,用户无法确切知道消息循环何时结束、主线程 何时退出;第二、在进程运行过程中,某个子模块或者加载的第三方DLL库无法修改这个进 程的主线程或其他超过它范围的代码,也就不能在主线程退出时获得调用自己的代码的时 机。问题二 虽然用户可以利用“线程托管函数”的方式将函数托管到主线程上,在主 线程上托管一个函数,当主线程结束退出时会调用这个函数,从而间接地得到通知,但这个 托管的函数的调用必须在主线程执行,对用户来说这种手段比较繁琐,如果要托管的函数 很多,不同的函数可能依附于不同的线程,不同的函数可能由不同的代码、甚至不同的第三 方的代码来创建等,这些情况导致这种手段操作起来更加复杂、更容易出错,甚至会破坏程 序结构。

发明内容
鉴于以上内容,有必要提供一种实现函数托管的方法,以提高函数托管效率、避免 函数托管错误且防止破坏程序结构。此外,还有必要提供一种实现函数托管的数据处理设备,以提高函数托管效率、避 免函数托管错误且防止破坏程序结构。一种实现函数托管的方法,适用于能运行构件化软件系统的数据处理设备。该 方法包括步骤(a)定义函数的托管函数、自动释放全局托管对象函数及析构函数;(b)执 行定义的托管函数将需托管的函数托管给进程;(c)执行定义的自动释放全局托管对象函 数,将被托管的函数的指针插入全局托管对象的托管对象链表;(d)等待所托管的进程结 束;(e)在所托管的进程退出进入准备结束状态时,定义的自动释放全局托管对象函数自 动释放全局托管对象,进入定义的析构函数;(f)执行定义的析构函数遍历全局托管对象 的托管对象链表,调用并执行所有被托管的函数。
一种实现函数托管的数据处理设备,该数据处理设备包括存储器及处理器。该存 储器用于存储构件化软件系统。该处理器用于运行存储的构件化软件系统中的函数托管模 块,以执行以下步骤(Π)定义函数的托管函数、自动释放全局托管对象函数及析构函数; ( 2)执行定义的托管函数将需托管的函数托管给进程;(i3)执行定义的自动释放全局托 管对象函数,将被托管的函数的指针插入全局托管对象的托管对象链表;(i4)等待所托管 的进程结束;(i5)在所托管的进程退出进入准备结束状态时,定义的自动释放全局托管对 象函数自动释放全局托管对象,进入定义的析构函数;(i6)执行定义的析构函数遍历全局 托管对象的托管对象链表,调用并执行所有被托管的函数。相较现有技术,本发明通过在构件化软件系统中利用函数的托管函数将需要托管 的函数托管给进程,在所托管的进程退出进入准备结束状态时利用析构函数调用并执行被 托管的函数,提高了函数的托管效率,避免了函数的托管错误和程序结构的破坏。


图1是本发明实现函数托管的数据处理设备较佳实施例的结构示意图。图2是本发明实现函数托管的方法较佳实施例的具体实施流程图。
具体实施例方式如图1所示,是本发明实现函数托管的数据处理设备较佳实施例的结构示意图。 该数据处理设备1可以是计算机、手机、个人数字助理(Personal Digital Assistant,PDA) 等。该数据处理设备1包括处理器11及存储器(图中未示出)。该存储器用于存储能实现 函数托管的构件化软件系统10。该构件化软件系统10包括一个函数托管模块100。该处 理器11用于运行存储的构件化软件系统10中的函数托管模块100以实现函数的托管。如图2所示,是本发明实现函数托管的方法较佳实施例的具体实施流程图。该方 法适用于图1所示的数据处理设备1。以下是结合本实施例逐步实现函数托管的内容,即该处理器11运行存储的构件 化软件系统10中的函数托管模块100逐步实现函数托管的内容。步骤S10,在为构件化软件系统10提供的函数构建界面中,定义函数的托管函数、 自动释放全局托管对象函数及析构函数,并执行定义的托管函数对需托管的函数进行托管。在本实施例中,是以托管C语言风格的函数为例进行说明的;在本发明的其他实 施例中,其他语言风格(例如C++语言风格)的函数实施情况与C语言风格的函数实施情 况相类似,因此,在不付出创造性劳动的情况下,本技术领域的技术人员应当能够通过以C 语言风格的函数为例的实施情况,轻易实现所有其他语言风格的函数基于本发明技术方案 的实施情况。以下是C语言风格的函数的托管函数与C++语言风格的函数的托管函数相类 似情况的部分展示(I)C语言风格的函数的托管函数的声明typedef Void (*PProcessExitRoutine)(PVoid);STATIC CARAPI eProcess:AtExit(/*[in]*/PProcessExitRoutine pEntry,//C 语言风格的函数指针
/*[in]*/PVoid pUserData) ;//用户调用上下文(2) C++语言风格的函数的托管函数的声明template<class T>STATIC CARAPI eProcess::AtExit (/*[in]*/T*pThis,//C++ 的 class 对象指针/* [in] */void (Τ *pEntry) ()) ;//class 的成员函数指针于本实施例步骤SlO中,可以定义函数的托管函数如下typedef Void(*PProcessExitRoutine)(PVoid);STATIC CARAPI eProcess:AtExit(/*[in]*/PProcessExitRoutine pEntry,//C 语言风格的函数指针/*[in]*/PVoid pUserData) ;//用户调用上下文Void OnExit (PVoid pUserData)//—个由用户实现的函数,预期在进程结束时被 调用{assert ((Int32) pUserData = = 0x1234) ;// 预期 pUserData = = 0x1234CThread: Sleep (1000, NULL) -J/ 使当前线程睡眠 1 秒钟CConsole: WriteLine ( “In OnExit function. · · ”);// 打印到屏幕输出}ECode UserRoutineC ..W用户实现的某个线程函数{CConsole: WriteLine ( "Entered UserRoutine. · · ”);// 打印到屏幕输出eProcess: AtExit (&0nExit, (PVoid) 0x1234) ;//将函数托管给当前进程CConsole: WriteLine ( "Leaving UserRoutine. · · ”);// 打印到屏幕输出return N0ERR0R;//退出用户代码}ECode ElastosMain (...) //Elastos 平台程序的入 口 函数{IThread^pThreadCConsole: WriteLine ( "Before CThread New (),,);//打印到屏幕输出CThread: :New(&UserRoutine,O, NULL, &pThread) ;// 创建一个新线程运行 UserRoutinepThread- > Join (INFINITE, NULL) ;// 等待线程结束CConsole: WriteLine ( "After JoinO ”);//打印到屏幕输出return N0ERR0R_EXIT ;//直接退出程序}C:\Test. exe[Enter]//屏幕输出,在控制台下执行上面的测试程序Before CThread: New()Entered UserRoutine...Leaving UserRoutine...
5
After JoinOIn OnExit function... C \」丨程序结束,退出到用户的控制台从上面可以看到,借助eProcess: =AtExit函数即可将函数托管给当前进程,当 进程结束时,会自动调用被托管的函数。从屏幕输出可知,当用户的Join返回后,退出了 ElastosMain,但进程并没有立即结束,而是进入被托管的函数OnExit中,当OnExit结束 后,进程才真正退出。类似的,用户也可以将一个C++语言风格的函数托管给进程,只是定 义的托管函数与上述C语言风格的函数的托管函数有所区别,但效果完全一样。同时,用户 也可以将多个函数托管给一个进程,这些被托管的函数会在所托管的进程退出进入准备结 束状态时按照注册顺序的相反顺序被调用执行。于本实施例步骤SlO中,可以定义自动释放全局托管对象函数如下class CAutoRun{· · · }CAutoRun g_autoRun ;ECode eProcess:AtExit([in]*/PProcessExitRoutine pEntry,/* [in] */PVoid pUserData) //进行函数托管实现的伪代码{g_autoRun. GetList (&pList) ;//从进程的全局托管对象上获取托管对象链表pList- > Insert (pEntry,pUserData) ;//将被托管的函数的指针插入全局托管 对象的托管对象链表return N0ERR0R ;}于本实施例步骤SlO中,可以定义析构函数如下CAutoRun CAutoRun (){pList = m_pList- > FirstO ;while (pList) {//遍历托管对象链表,调用并执行被托管的函数pList- > GetCurrent (&pEntry, &pUserData) ;// 从节点上获得被托管的函数pEntry (pUserData) ;//调用被托管的函数pList = pList- > Next () ;// 继续遍历链表}}步骤S11,执行定义的自动释放全局托管对象函数,将被托管的函数的指针插入全 局托管对象的托管对象链表。步骤S12,等待所托管的进程结束。步骤S13,在所托管的进程退出进入准备结束状态时,定义的自动释放全局托管对 象函数自动释放全局托管对象,进入定义的析构函数。步骤S15,执行定义的析构函数遍历全局托管对象的托管对象链表,调用并执行所有被托管的函数。 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参 照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明 的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
权利要求
一种实现函数托管的方法,适用于能运行构件化软件系统的数据处理设备,其特征在于,该方法包括步骤定义函数的托管函数、自动释放全局托管对象函数及析构函数;执行定义的托管函数,将需托管的函数托管给进程;执行定义的自动释放全局托管对象函数,将被托管的函数的指针插入全局托管对象的托管对象链表;等待所托管的进程结束;在所托管的进程退出进入准备结束状态时,定义的自动释放全局托管对象函数自动释放全局托管对象,进入定义的析构函数;及执行定义的析构函数遍历全局托管对象的托管对象链表,调用并执行所有被托管的函数。
2.如权利要求1所述的实现函数托管的方法,其特征在于,所述数据处理设备包括计 算机、手机、个人数字助理。
3.如权利要求1或2所述的实现函数托管的方法,其特征在于,所述构件化软件系统是 嵌入式操作系统。
4.如权利要求1或2所述的实现函数托管的方法,其特征在于,所述函数包括C语言风 格的函数及C++语言风格的函数。
5.一种实现函数托管的数据处理设备,其特征在于,该数据处理设备包括 存储器,用于存储构件化软件系统;处理器,用于运行存储的构件化软件系统中的函数托管模块,以执行以下步骤 定义函数的托管函数、自动释放全局托管对象函数及析构函数; 执行定义的托管函数,将需托管的函数托管给进程;执行定义的自动释放全局托管对象函数,将被托管的函数的指针插入全局托管对象的 托管对象链表;等待所托管的进程结束;在所托管的进程退出进入准备结束状态时,定义的自动释放全局托管对象函数自动释 放全局托管对象,进入定义的析构函数;及执行定义的析构函数遍历全局托管对象的托管对象链表,调用并执行所有被托管的函数。
6.如权利要求5所述的实现函数托管的数据处理设备,其特征在于,所述数据处理设 备包括计算机、手机、个人数字助理。
7.如权利要求5或6所述的实现函数托管的数据处理设备,其特征在于,所述构件化软 件系统是嵌入式操作系统。
8.如权利要求5或6所述的实现函数托管的数据处理设备,其特征在于,所述函数包括 C语言风格的函数及C++语言风格的函数。
全文摘要
本发明提供一种实现函数托管的方法,该方法通过在构件化软件系统中利用函数的托管函数将需要托管的函数托管给进程,在所托管的进程退出进入准备结束状态时利用析构函数调用并执行被托管的函数,提高了函数的托管效率,避免了函数的托管错误和程序结构的破坏。本发明还提供一种实现函数托管的数据处理设备。
文档编号G06F9/44GK101882067SQ20091005088
公开日2010年11月10日 申请日期2009年5月8日 优先权日2009年5月8日
发明者宋世军, 陈榕 申请人:上海科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1