任务实现装置和方法、以及应用_2

文档序号:8258164阅读:来源:国知局
在大量的请求时,可以统一存放在请求管理模块150,便于各个任务执行模块定时去查询,例如通过轮询的方式不断查询是否有需要执行其的请求。例如,调用模块120通过主线程发出的游戏截图的请求就可以存放在请求管理模块150中。
[0024]可选地,本发明的任务执行装置100还包括任务结果管理模块160。任务结果管理模块160适于存放所获得的任务结果,可以由移动终端本地的存储单元或者缓存单元来实现。当任务执行模块110执行预定任务而获得任务结果时,将所述任务结果统一存放在任务结果管理模块160中。获取模块140查询任务结果管理模块160,确定是否有预定任务的执行结果,如果有,则从任务结果管理模块160获取任务结果,提供给应用主程序使用。所述执行单元112也可以主动通知获取模块140所述预定任务已经完成,并告知其从哪里获取所述预定任务的执行结果。通过将任务结果统一存放在任务结果管理模块160中,在同一任务执行程序执行多次获得多个任务结果时,可以将多个任务结果排成队列消息,依次提供给获取模块140 ;另外,当有多个任务执行模块110产生的若干任务结果时,也便于获取模块140依次获取各个任务结果,不会出现混乱情形。
[0025]另外,本发明还可以包括设置模块170。设置模块170适于设置所述调用所述任务执行模块110的请求的状态。具体地,当所述请求产生时,在请求管理模块150中将所述请求的状态设置为“可被访问或可被读取的状态”,例如设置为“true”,这样,当任务执行模块110或者其请求查询单元111查询请求管理模块150,可以查询所有处于“可被访问的状态”的请求,并根据该请求而执行相应的任务执行模块110。当所述请求的预定任务执行完毕并已获得任务结果时,将请求管理模块150中所述请求的状态修改为“不可被访问的状态或者不可被读取”,例如修改为“fa I se”,即清除该游戏截图请求,这样,当任务执行模块110或者其请求查询单元111查询请求管理模块150,已经被响应的请求就不会再次被查询,从而避免同一请求被重复执行。
[0026]本发明还提供一种任务实现方法。所述任务是主程序运行过程中需要执行的一个或者多个任务,所述主程序在主线程上运行,所述任务在一个或多个次线程上执行。
[0027]下面以任务在同一应用的不同线程之间实现为例进行说明。图2示出了根据本发明的一种任务实现方法。如图2所示,本发明的方法200在应用主线程与次线程之间执行,从而为该应用实现一预定的扩展功能。
[0028]本发明的方法200始于步骤S210,在步骤S210,所述应用运行时调用任务执行程序,所述应用在主线程上运行,所述任务执行程序在次线程上执行一预定任务。例如,所述应用为一网络游戏平台提供的网络游戏,该网络游戏在游戏客户端(即移动终端,例如智能手机)侧下载、安装并在游戏客户端侧运行。所述任务执行程序嵌入在游戏的SDK中,但在游戏客户端的次线程上才可以执行,例如所述任务执行程序为执行游戏截图的程序,用于在网络游戏运行过程中对游戏画面进行截图。当网络游戏在游戏客户端侧运行时,根据用户的需求,可能会调用执行游戏截图的程序。
[0029]接下来,执行步骤S220,启动运行所述任务执行程序的次线程。由于该任务执行程序不能在主线程上执行,而是在某一次线程上执行,因此,需要在执行所述任务执行程序前启动相应的次线程。
[0030]例如,对于网络游戏,其具有多个次线程,当需要执行游戏截图的程序时,需要启动游戏的OpenGL线程,以在OpenGL线程上执行游戏截图程序。
[0031]接下来,在步骤S230,所述任务执行程序执行其查询功能,查询是否存在执行所述预定任务的请求。例如,当在网络游戏中设置有游戏截图功能时,会在移动终端的游戏界面上设置“游戏截图”按钮,这样,当网络游戏在移动终端运行时,在移动终端的游戏界面上会显示出“游戏截图”按钮。当玩家点击该“游戏截图”按钮时,就会产生一个“游戏截图”的请求。例如,一个“游戏截图”的请求的创建和发送可以由如下代码实现:
[0032]Il创建一个截图请求
[0033]ScreenshotRequest request = new ScreenshotRequest()
[0034]//填写请求的具体内容
[0035]request, imageffidth = 480 ;// 图片宽度
[0036]request.1mageHeight = 800 ;// 图片高度
[0037]request.1mageType =,,JPEG” -J/ 图片类型
[0038]//发送请求
[0039]KT.sendScreenshotRequest(request)
[0040]所述用于游戏截图的任务执行程序会不断地查询是否存在“游戏截图”请求。当查询到存在“游戏截图”请求时,则执行步骤S240 ;如果没有查询到“游戏截图”请求,则重新执行步骤S230,重新查询是否存在“游戏截图”请求,在步骤S230中的查询可以按预定时间间隔进行的轮询。
[0041]可选地,在步骤S210后还可以包括一步骤S212(在图2中未示出):让所述调用任务执行程序的请求存放在一个请求管理中心中,这样,在步骤S230中,所述任务执行程序则可以在请求管理中心中查询是否存在其所执行的预定任务的请求。通过请求管理中心可以统一管理多个请求,而且还可以将多个请求按照先后次序排成消息队列,从而也方便各请求按顺序执行。
[0042]可选地,在步骤S212之后,还可以包括一个步骤S216(在图2中未示出):将存放在请求管理中心中的请求的状态设置为可访问或可读取的状态。例如,对于“游戏截图”请求,可以设置其状态值hasScreenshotRequest = true。当用于游戏截图的任务执行程序在OpenGL线程上轮询时,如果查询到有一可访问的游戏截图请求(如游戏截图请求且hasScreenshotRequest = true),则执行步骤 S240。
[0043]在步骤S240,所述任务执行程序执行所述预定任务并获得任务结果。例如,对于预定任务为游戏截图时,用于游戏截图的任务执行程序执行游戏截图功能,对当前游戏界面中的全部或者一部分进行游戏截图,获得想要的游戏截图。
[0044]在步骤S240中获得任务结果之后,执行步骤S250,通知任务完成,将所述任务结果提供给所述应用,从而使得所述应用利用其它线程实现了在其主线程上不能实现的功能(或者预定任务)。
[0045]可选地,在步骤S240之后,执行步骤S260,存储所述任务结果,所述任务结果可以统一存放在任务结果管理中心,所述任务结果管理中心可以由移动终端本地的存储器、或者移动终端的内存的一部分来实现。
[0046]其中,在所述步骤S250,通知任务完成,将所述任务结果提供给所述应用,既可以是将所述任务结果主动提供给所述应用,也可以是所述应用先查询所述任务结果是否存在,然后在查询存在所述任务结果时获取所述任务结果。例如,对于游戏截图任务来说,在步骤S240获得想要的游戏截图后,执行步骤S260,将所述游戏截图存储在任务结果管理中心,然后执行步骤S250,通知游戏截图任务完成,将所述游戏截图提供给所述应用,供所述应用所使用。
[0047]下面给出一段游戏线程(OpenGL线程)处理截图请求以实现游戏截图的代码:
[0048]voi d handleScreenshotRequest(ScreenshotRequest request){
[0049]//获取截图请求具体内容
[0050]imageffidth = request, get Imageffidth ();
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1