一种异步调用java线程中本地代码的方法及装置的制作方法

文档序号:6427070阅读:127来源:国知局
专利名称:一种异步调用java线程中本地代码的方法及装置的制作方法
技术领域
本发明涉及移动互联网领域,特别涉及一种异步调用java线程中本地代码的方法及装置。
背景技术
随着移动互联网的不断发展,移动智能操作系统呈现多样化,移动终端应用层出不穷。新智能移动操作系统android在全球引起了巨大反响,大量的软件开发人员投入其中。android移动系统应用层软件以java语言开发为主,但是也允许开发人员使用其它语言(c/c++),这对熟悉c/c++的开发人员带来了福音,同时还可以把现成的c/c++本地代码移植到android系统中。但是c/c++本地代码有些api在android系统上无法使用,例如 消息队列、共享内存等,另外,对于c线程的跟踪定位都比较困难。如何利用上层java结合c/c++实现系统开发成了刻不容缓要考虑的问题。

发明内容
本发明解决的技术问题在于提供了一种异步调用java线程中本地代码的方法,克服android的c库无法使用消息队列、共享内存实现本地代码异步调用,以及方便跟踪线程状态等;本发明还提供了一种异步调用java线程中本地代码的装置。为解决上述问题,本发明提供了一种异步调用java线程中本地代码的方法,包括,为java线程分配线程号Pno ;在应用启动时,通过本地控制模块中启动java线程接口启动java线程;所述Java线程到进程控制块PCB数据区进行注册;所述本地线程发送调用消息至java线程的消息队列,所述java线程中本地代码根据所述调用消息完成对应函数的调用。同时,本发明提供了另外一种异步调用java线程中本地代码的方法,包括,为java线程分配线程号Pno ;在应用启动时,通过本地控制模块中启动java线程接口启动java线程;所述Java线程到进程控制块PCB数据区进行注册;一个java线程发送调用消息至另一 java线程的消息队列,所述java线程中本地代码根据所述调用消息完成对应函数的调用。本发明还提供一种异步调用java线程中本地代码的装置,包括,线程号分配模块,用于为java线程分配线程号Pno ;本地控制模块,用于在应用启动时,通过启动java线程接口启动java线程;线程注册模块,用于Java线程到进程控制块PCB数据区进行注册;异步调用模块,用于在所述本地线程或一个java线程发送调用消息至java线程的消息队列时,所述java线程中本地代码根据所述调用消息完成对应函数的调用。
采用本发明的技术方案,克服android的c库无法使用消息队列、共享内存实现本地代码异步调用,以及方便跟踪线程状态等,不仅利用了 android系统中技术减少了开发周期,节约了成本,而且方便了版本的扩展维护。


此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图I是本发明第一方法实施例流程图;图2是本发明第二方法实施例流程图;图3是本发明第三实施例系统结构图。
具体实施例方式为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。如图I所示,是本发明第一方法实施例流程图,提供了一种本地线程的本地代码调用java线程中的本地代码的方法,包括以下步骤步骤S101,为java线程分配线程号pno,便于异步调用时消息分发;步骤S102,应用启动时,通过本地控制模块中的startJavaThread(启动java线程)接口启动java线程;步骤S103,java线程到PCB (进程控制块)数据区进行注册;步骤S104,创建本地线程,通过postMessageEX(intrecieverpno, int msgPtr)发送调用消息到分配pno号的java线程中的消息队列,java线程中本地代码根据msgPtr数据结构的值完成对应函数的调用;具体地,当java线程启动并完成到pcb数据区注册后,本地线程通过调用postMessageEX (int recieverpno, int msgPtr),其中 recieverpno指被调用本地代码对应的线程号,msgPtr指传递的数据结构参数;postMessageEX在向java线程发送消息队列前需要把本地线程附加到java虚拟机中,只有这样本地线程才可以调用java回调函数;当java被调用时,遍历线程hash表找到对应线程的消息句柄,并通过该消息句柄发送到java线程的消息队列中,java线程的消息队列处理函数从消息队列中取出消息后,调用java注册的PCB数据区中的本地函数调用指针Ipentry进入本地代码,本地代码根据msgPtr中的数据结构参数调用对应的函数,其中Ipentry统一处理异步调用同时完成消息分发到具体函数中。如图2所示,是本发明第二方法实施例流程图,提供一种java线程中的本地代码调用java线程中本地代码的方法,包括以下步骤步骤S201,为两个java线程分配pno号,便于异步调用时消息分发;步骤S202,应用启动时,通过本地控制模块中的StartJavaThread接口启动所述两个java线程;步骤S203,所述两个线程到pcb数据区进行注册;
步骤S204,其中一个 java 线程可以通过 postMessag(int recieverpno,intmsgPtr)方法发送调用消息到另一线程中消息队列,java线程中本地代码根据msgPtr数据结构的值完成对应函数的调用。具体地,当两个java线程启动并完成到pcb数据区注册后,其中一个java线程通过调用 postMessage (int recieverpno, int msgPtr),其中 recieverpno 指被调用本地代码对应的线程号,msgPtr指传递的数据结构参数;当java被调用时,通过遍历线程hash表找到对应线程的消息句柄,通过该消息句柄发送到线程的消息队列中,java线程的消息队列处理函数从队列中取出消息后,调用java注册的PCB数据区中的本地函数调用指针Ipentry进入本地代码,本地代码根据msgPtr中的数据结构参数调用对应的函数。如图3所示,是本发明第三实施例系统结构图,提供了一种异步调用java线程中本地代码的装置,包括,
线程号分配模块301,用于为java线程分配线程号Pno ;本地控制模块302,用于在应用启动时,通过启动java线程接口启动java线程;线程注册模块303,用于Java线程到进程控制块PCB数据区进行注册; 异步调用模块304,用于在所述本地线程或一个java线程发送调用消息至java线程的消息队列时,所述java线程中本地代码根据所述调用消息完成对应函数的调用。所述调用消息包括被调用本地代码对应的java线程号和传递的数据结构参数。所述异步调用模块用于所述java线程中本地代码根据所述调用消息完成对应函数的调用具体为,在所述本地线程发送调用消息至java线程的消息队列时,java线程被调用,遍历线程hash表找到对应java线程的消息句柄,并通过该消息句柄发送被调用本地代码对应的java线程号到java线程的消息队列中,java线程的消息队列处理函数从消息队列中取出对应的java线程后,调用java线程注册的PCB数据区中的本地函数调用指针Ipentry进入本地代码,所述本地代码根据传递的数据结构参数调用对应的函数;或者在所述一个java线程发送调用消息至java线程的消息队列时,java线程被调用,通过遍历线程hash表找到对应线程的消息句柄,通过该消息句柄发送被调用本地代码对应的java线程号到线程的消息队列中,java线程的消息队列处理函数从队列中取出对应的java线程后,调用java注册的PCB数据区中的本地函数调用指针Ipentry进入本地代码,本地代码根据传递的数据结构参数调用对应的函数。本地控制模块,还用于封装控制方法原语,便于本地代码之间透明调用,定义线程模块PCB (进程控制块)数据区,该数据区包括线程标志id、线程id、线程名称、线程入口函数指针等,线程间消息通过线程标示id进行区分,另外封装本地接口与java上层的适配接P postMessage> postMessageEx> startJavaThread> stopJavaThread 等,postMessage Ml数主要完成java线程间的消息异步传递,postMessageEx函数主要完成本地c线程与java线程间的消息传递且只支持c线程到java线程的单向传递;所述异步调用模块,还用于维护android消息句柄以及消息队列以及与本地接口适配。上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识 进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
权利要求
1.一种异步调用java线程中本地代码的方法,其特征在于,包括, 为java线程分配线程号Pno ; 在应用启动时,通过本地控制模块中启动java线程接口启动java线程; 所述java线程到进程控制块PCB数据区进行注册; 所述本地线程发送调用消息至java线程的消息队列,所述java线程中本地代码根据所述调用消息完成对应函数的调用。
2.根据权利要求I所述的方法,其特征在于,所述调用消息包括被调用本地代码对应的java线程号和传递的数据结构参数。
3.根据权利要求2所述的方法,其特征在于,所述java线程中本地代码根据所述调用消息完成对应函数的调用具体为, 在java线程被调用时,遍历线程hash表找到对应java线程的消息句柄,并通过该消息句柄发送被调用本地代码对应的java线程号到java线程的消息队列中,java线程的消息队列处理函数从消息队列中取出对应的java线程后,调用java线程注册的PCB数据区中的本地函数调用指针进入本地代码,所述本地代码根据传递的数据结构参数调用对应的函数。
4.根据权利要求I至3任一所述的方法,其特征在于,所述方法中,通过消息传递函数在向java线程消息队列发送调用消息前将所述本地线程附加到java虚拟机中,以使得本地线程调用java回调函数。
5.一种异步调用java线程中本地代码的方法,其特征在于,包括, 为java线程分配线程号Pno ; 在应用启动时,通过本地控制模块中启动java线程接口启动java线程; 所述Java线程到进程控制块PCB数据区进行注册; 一个java线程发送调用消息至另一 java线程的消息队列,所述java线程中本地代码根据所述调用消息完成对应函数的调用。
6.根据权利要求5所述的方法,其特征在于,所述调用消息包括被调用本地代码对应的java线程号和传递的数据结构参数。
7.根据权利要求6所述的方法,其特征在于,所述java线程中本地代码根据所述调用消息完成对应函数的调用具体为, 当java线程被调用时,通过遍历线程hash表找到对应线程的消息句柄,通过该消息句柄发送被调用本地代码对应的java线程号到线程的消息队列中,java线程的消息队列处理函数从队列中取出对应的java线程后,调用java注册的PCB数据区中的本地函数调用指针进入本地代码,本地代码根据传递的数据结构参数调用对应的函数。
8.一种异步调用java线程中本地代码的装置,其特征在于,包括, 线程号分配模块,用于为java线程分配线程号Pno ; 本地控制模块,用于在应用启动时,通过启动java线程接口启动java线程; 线程注册模块,用于Java线程到进程控制块PCB数据区进行注册; 异步调用模块,用于在所述本地线程或一个java线程发送调用消息至java线程的消息队列时,所述java线程中本地代码根据所述调用消息完成对应函数的调用。
9.根据权利要求8所述的装置,其特征在于,所述调用消息包括被调用本地代码对应的java线程号和传递的数据结构参数。
10.根据权利要求9所述的装置,其特征在于,所述异步调用模块用于所述java线程中本地代码根据所述调用消息完成对应函数的调用具体为, 在所述本地线程发送调用消息至java线程的消息队列时,java线程被调用,遍历线程hash表找到对应java线程的消息句柄,并通过该消息句柄发送被调用本地代码对应的java线程号到java线程的消息队列中,java线程的消息队列处理函数从消息队列中取出对应的java线程后,调用java线程注册的PCB数据区中的本地函数调用指针进入本地代码,所述本地代码根据传递的数据结构参数调用对应的函数;或者 在所述一个java线程发送调用消息至java线程的消息队列时,java线程被调用,通过遍历线程hash表找到对应线程的消息句柄,通过该消息句柄发送被调用本地代码对应的java线程号到线程的消息队列中,java线程的消息队列处理函数从队列中取出对应的java线程后,调用java注册的PCB数据区中的本地函数调用指针进入本地代码,本地代码 根据传递的数据结构参数调用对应的函数。
全文摘要
本发明涉及一种调用java线程中本地代码的方法,应用于本地线程的本地代码调用java线程中本地代码中,包括,为java线程分配Pno;在应用启动时,通过本地控制模块中启动java线程接口启动java线程;所述Java线程到PCB数据区进行注册;所述本地线程发送调用消息至java线程的消息队列,所述java线程中本地代码根据所述调用消息完成对应函数的调用。本发明提供了另外一种调用java线程中本地代码的方法,应用于java线程的本地代码调用java线程中本地代码中。本发明还提供一种调用java线程中本地代码的装置。采用本发明的技术方案,减少了开发周期,节约了成本,而且方便了版本的扩展维护。
文档编号G06F9/46GK102841803SQ20111017380
公开日2012年12月26日 申请日期2011年6月24日 优先权日2011年6月24日
发明者张晓刚 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1