CN108829502B - 线程操作的实现方法和装置 - Google Patents
线程操作的实现方法和装置 Download PDFInfo
- Publication number
- CN108829502B CN108829502B CN201810646532.0A CN201810646532A CN108829502B CN 108829502 B CN108829502 B CN 108829502B CN 201810646532 A CN201810646532 A CN 201810646532A CN 108829502 B CN108829502 B CN 108829502B
- Authority
- CN
- China
- Prior art keywords
- task
- template
- asynchronous
- target thread
- information
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了线程操作的实现方法和装置。所述方法包括:获取待执行任务的任务信息;根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;在本线程中执行所述任务,或者通知第一目标线程执行所述任务。该技术方案的有益效果在于,任务模板既支持泛化,比较通用,也支持特化,能够在性能上有所提升,并且对于一个类型的任务可以采用同一任务模板,实现起来简单方便,效率很高。
Description
技术领域
本发明涉及计算机技术领域,具体涉及线程操作的实现方法和装置。
背景技术
线程一般而言是程序运行的最小单元,线程操作虽小,却是程序运行的基础。因此,对线程操作进行性能上的改进一直是需要解决的问题。
例如,线程间可能存在需要传递参数的情况,随着程序设计的不断发展,开发者希望能够实现传递的参数种类增多、个数也不固定;线程可能需要发出网络请求,网络请求较多,相应的回调也复杂,在这个过程中可能产生内存泄漏问题,等等。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的线程操作的实现方法和装置。
依据本发明的一个方面,提供了一种线程操作的实现方法,包括:
获取待执行任务的任务信息;
根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
在本线程中执行所述任务,或者通知第一目标线程执行所述任务。
可选地,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板。
可选地,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类。
可选地,所述任务信息包括可调用对象和/或参数,所述根据所述任务信息和选取的任务模板生成任务包括:
将所述任务信息按所述异步任务模板封装为异步任务对象。
可选地,所述将所述任务信息按所述异步任务模板封装为异步任务对象包括:
利用绑定机制实现对所述异步任务对象的封装。
可选地,所述通知第一目标线程执行所述任务包括:
将所述异步任务对象放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
可选地,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
可选地,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
可选地,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
可选地,该方法还包括:
判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
可选地,所述任务为网络请求任务;
所述根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务包括:
将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
可选地,所述网络请求模板是通过加载的网络请求静态库获得的。
可选地,所述网络请求模板包括如下的一种或多种:
从内存读取数据的特化模板;
从文件读取数据的特化模板;
向内存写入数据的特化模板;
向文件写入数据的特化模板。
可选地,所述任务模板包括可变参数模板;
所述据所述任务信息和选取的任务模板生成任务包括:
对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数;
根据所述若干个参数和所述可变参数模板生成任务。
可选地,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
依据本发明的另一方面,提供了一种线程操作的实现装置,包括:
任务信息获取单元,适于获取待执行任务的任务信息;
任务生成单元,适于根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
执行单元,适于在本线程中执行所述任务,或者通知第一目标线程执行所述任务。
可选地,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板。
可选地,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类。
可选地,所述任务信息包括可调用对象和/或参数;
所述任务生成单元,适于将所述任务信息按所述异步任务模板封装为异步任务对象。
可选地,所述任务生成单元,适于利用绑定机制实现对所述异步任务对象的封装。
可选地,所述执行单元,适于将所述异步任务对象放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
可选地,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
可选地,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
可选地,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
可选地,所述执行单元,还适于判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
可选地,所述任务为网络请求任务;
所述任务生成单元,适于将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
可选地,所述网络请求模板是通过加载的网络请求静态库获得的。
可选地,所述网络请求模板包括如下的一种或多种:从内存读取数据的特化模板;从文件读取数据的特化模板;向内存写入数据的特化模板;向文件写入数据的特化模板。
可选地,所述任务模板包括可变参数模板;
所述任务生成单元,适于对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数,根据所述若干个参数和所述可变参数模板生成任务。
可选地,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
依据本发明的又一方面,提供了一种智能终端,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述任一所述的方法。
依据本发明的再一方面,提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如上述任一所述的方法。
由上述可知,本发明的技术方案,在获取到待执行任务的任务信息后,可以选取与之匹配的任务模板来生成任务,以便在本线程或其他线程来进行执行。该技术方案的有益效果在于,任务模板既支持泛化,比较通用,也支持特化,能够在性能上有所提升,并且对于一个类型的任务可以采用同一任务模板,实现起来简单方便,效率很高。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种线程操作的实现方法的流程示意图;
图2示出了根据本发明一个实施例的一种线程操作的实现装置的结构示意图;
图3示出了根据本发明一个实施例的智能终端的结构示意图;
图4示出了根据本发明一个实施例的计算机可读存储介质的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种线程操作的实现方法的流程示意图。如图1所示,该方法包括:
步骤S110,获取待执行任务的任务信息。
这里,任务信息可以是多种类型的,例如在本发明的一个实施例中,上述方法中,任务信息包括如下的一种或多种:基本类型对象、lambda表达式、指针、智能指针、普通函数。
通常能够实现将基本类型对象(如整型对象int、字符串对象char)、指针等作为参数进行传递,例如在线程间可以通过PostMessage来传递基本类型。但是类类型(class类型,例如智能指针)往往不能作为PostMessage的参数来进行传递。因此在本发明的实施例中,实现了一种任务模板,可以支持大多数类型的参数传递,以及对传递的参数数量几乎没有限制。
步骤S120,根据任务信息选取相匹配的任务模板,以及根据任务信息和选取的任务模板生成任务。
步骤S130,在本线程中执行任务,或者通知第一目标线程执行任务。
可见,图1所示的方法,在获取到待执行任务的任务信息后,可以选取与之匹配的任务模板来生成任务,以便在本线程或其他线程来进行执行。该技术方案的有益效果在于,任务模板既支持泛化,比较通用,也支持特化,能够在性能上有所提升,并且对于一个类型的任务可以采用同一任务模板,实现起来简单方便,效率很高。
通知第一目标线程执行任务的过程可以视为使其执行一个异步任务。即在本发明的一个实施例中,上述方法中,待执行任务为异步任务,与任务信息匹配的任务模板为异步任务模板。
异步任务是指第一目标线程可以执行任务而本线程不需要立即依赖其执行结果而进行等待,可以并行执行其他任务。
在本发明的一个实施例中,上述方法中,异步任务模板是从指定的异步任务类中获得的,异步任务类继承自CWindowImpl类。
CWindowImpl类是一个最终派生自CWindow类的模板类。由于需要其他线程执行异步任务,为该线程实现一个窗口可以方便进行任务的发送。通常,为一个线程建立窗口需要继承CWindowImpl类,而在本发明的实施例中由于需要以异步任务模板来实现异步任务,因此在本实施例中新实现的异步任务类可以是继承CWindowImpl类,这样建立窗口只需要继承新实现的异步任务类即可。
在本发明的一个实施例中,上述方法中,任务信息包括可调用对象和/或参数,根据任务信息和选取的任务模板生成任务包括:将任务信息按异步任务模板封装为异步任务对象。
这里,可调用对象可以是函数、lambda表达式等等。参数可以是调用该可调用对象的参数,类型、数量均可以是多样化的。
其中,封装异步任务对象的具体实现可以通过c++提供的std::function来实现。例如,将fn(可调用对象)、args(相应参数)封装成std::function<void()>。
但是通过调试发现,如果直接使用std::function,会产生若干次不必要的左值拷贝和右值拷贝,因此在本发明的一个实施例中,上述方法中,将任务信息按异步任务模板封装为异步任务对象包括:利用绑定机制实现对异步任务对象的封装。
该绑定机制与Windows***提供的绑定原理相似,在此不再详细介绍。通过绑定机制替代std::function实现封装,可以减少上面提到的不必要的左值拷贝和右值拷贝。
在本发明的一个实施例中,上述方法中,通知第一目标线程执行任务包括:将异步任务对象放入第一目标线程的消息队列,以使第一目标线程在接收到执行信号从消息队列中取出异步任务对象,执行异步任务。
可以看出,这样本线程不需要关心异步任务在目标线程中如何执行,只需要将异步任务对象赋值放入消息队列。这与PostMessage方式的不同是十分明显的,PostMessage仅是传递一个消息,携带的参数有限;而本发明实施例所提供的方式,实现的是任务传递,携带的参数类型和数量都得到了极大的拓展。
有时本线程需要第一目标线程返回执行结果,例如主线程(UI线程)通知子线程执行耗时操作,根据执行结果更新UI(User Interface,用户交互界面,前同)。因此在本发明的一个实施例中,上述方法中,任务信息包括执行结果捕捉函数;当执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行执行结果捕获函数,以从第一目标线程捕获异步任务的执行结果。
这里的第二目标线程也可以是本线程。可以看出,执行执行结果捕捉函数的过程依然可以是一个异步过程。这样的好处在于,执行任务的第一目标线程可以不关心需要返回哪些数据,由需要这些数据的第二目标线程执行执行结果捕捉函数即可。
在本发明的一个实施例中,上述方法中,执行结果捕获函数是通过对lambda表达式进行封装得到的。
前文也提到lambda表达式可以作为任务信息。Lambda表达式可以称为匿名函数或是闭包,可以实现在调用处直接执行,不需要提前声明。
在本发明的一个实施例中,上述方法中,执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,第一捕获函数和第二捕获函数为重载函数;类型萃取函数用于对执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
在本实施例中提供了一种对性能再进一步优化的方式,即活用了c++11提供的类型萃取思想,针对执行结果萃取出的类型原型包含参数和不包含参数的两种情况分别进行了特化处理。这里的类型萃取函数可以自定义,也可以适用自带的函数。
在本发明的一个实施例中,上述方法还包括:判断用于执行任务的第一目标线程是否存在,若不存在,则初始化用于执行任务的第一目标线程。
例如,适用c++11编程设计,利用c++11提供的模板template,一种实现的示例如下:
template<typename Fn,typename...Args>
void ATPostTask(ATID atid,Fn&&fn,Args&&...args);
这里Fn依然代表可调用对象,Args代表可调用对象依赖的参数。ATID是自定义的数字ID,与一个线程相对应,如果执行上述方法时相应的ID不存在,那么说明目标线程不存在,需要初始化一个相应的线程。
下面给出一个具体示例,例如需要在线程ATID_DB上执行Func(a,b),可以有如下几种实现:
1)ATPostTask(ATID_DB,Func,a,b),fn=Func,args=a、b;
2)ATPostTask(ATID_DB,[a,b]{Func(a,b);}),fn=[a,b]{Func(a,b);},args=空;
3)ATPostTask(ATID_DB,[a](B b){Func(a,b);},b),fn=[a](B b){Func(a,b);},args=b;
可以看出,在具体的实现中,参数和可调用对象的设置是十分灵活的。
上述实施例介绍了线程间参数传递,实现异步任务的一些方式。而线程操作的方式并不仅有这一种,下面介绍与网络请求相关的任务是如何实现的。
在客户端程序中,如果需要进行网络通信,发出网络请求,那必然有很多适用场景,通常开发人员会以一个独立的动态链接库dll来实现。网络请求一般伴随着相应的回调处理,通过分析发现,一些开发较差的动态链接库存在如下问题:每一个回调都要定义一个class,造成类***,不可避免地造成了大量内存泄漏问题。并且由于使用时的过度包装,在调用处想要找到回调代码,更是非常非常困难,对开发人员十分不友好。
而利用任务模板来实现能够有效改善上述问题。在本发明的一个实施例中,上述方法中,任务为网络请求任务;根据任务信息选取相匹配的任务模板,以及根据任务信息和选取的任务模板生成任务包括:将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
移入一个新的网络请求的格式可以如下所示:Req(url,…fn)。这里,回调函数fn可以利用lambda实现,前面已经介绍过lambda的特性,可以容易看到,在调用处,可以直接找到回调代码,对于开发人员而言,接手其他开发者开发的代码也更容易阅读。
在本发明的一个实施例中,上述方法中,网络请求模板是通过加载的网络请求静态库获得的。这里的网络请求静态库可以是一个dll,在客户端使用时进行加载。
在本发明的一个实施例中,上述方法中,网络请求模板包括如下的一种或多种:从内存读取数据的特化模板;从文件读取数据的特化模板;向内存写入数据的特化模板;向文件写入数据的特化模板。
在本实施例中,考虑到性能的优化,针对网络请求中四类常见情形,分别设置了相应的特化模板,经实践能够极大提升性能。
在本发明的一个实施例中,上述方法中,任务模板包括可变参数模板;据任务信息和选取的任务模板生成任务包括:对任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数;根据若干个参数和可变参数模板生成任务。
可变参数模板是c++11提供的新特性,支持泛化,普通模板只可以采取固定数量的模板参数,而通过可变参数模板,理论上可以接收任意数量的模板参数。而作为任务信息的参数可以是多种类型的,可以将其通过类型萃取转换为通用类型。
图2示出了根据本发明一个实施例的一种线程操作的实现装置的结构示意图。如图2所示,线程操作的实现装置200包括:
任务信息获取单元210,适于获取待执行任务的任务信息。
这里,任务信息可以是多种类型的,例如在本发明的一个实施例中,上述装置中,任务信息包括如下的一种或多种:基本类型对象、lambda表达式、指针、智能指针、普通函数。
通常能够实现将基本类型对象(如整型对象int、字符串对象char)、指针等作为参数进行传递,例如在线程间可以通过PostMessage来传递基本类型。但是类类型(class类型,例如智能指针)往往不能作为PostMessage的参数来进行传递。因此在本发明的实施例中,实现了一种任务模板,可以支持大多数类型的参数传递,以及对传递的参数数量几乎没有限制。
任务生成单元220,适于根据任务信息选取相匹配的任务模板,以及根据任务信息和选取的任务模板生成任务。
执行单元230,适于在本线程中执行任务,或者通知第一目标线程执行任务。
可见,图2所示的装置,在获取到待执行任务的任务信息后,可以选取与之匹配的任务模板来生成任务,以便在本线程或其他线程来进行执行。该技术方案的有益效果在于,任务模板既支持泛化,比较通用,也支持特化,能够在性能上有所提升,并且对于一个类型的任务可以采用同一任务模板,实现起来简单方便,效率很高。
通知第一目标线程执行任务的过程可以视为使其执行一个异步任务。即在本发明的一个实施例中,上述装置中,待执行任务为异步任务,与任务信息匹配的任务模板为异步任务模板。
在本发明的一个实施例中,上述装置中,异步任务模板是从指定的异步任务类中获得的,异步任务类继承自CWindowImpl类。
CWindowImpl类是一个最终派生自CWindow类的模板类。由于需要其他线程执行异步任务,为该线程实现一个窗口可以方便进行任务的发送。通常,为一个线程建立窗口需要继承CWindowImpl类,而在本发明的实施例中由于需要以异步任务模板来实现异步任务,因此在本实施例中新实现的异步任务类可以是继承CWindowImpl类,这样建立窗口只需要继承新实现的异步任务类即可。
在本发明的一个实施例中,上述装置中,任务信息包括可调用对象和/或参数;任务生成单元220,适于将任务信息按异步任务模板封装为异步任务对象。
这里,可调用对象可以是函数、lambda表达式等等。参数可以是调用该可调用对象的参数,类型、数量均可以是多样化的。
其中,封装异步任务对象的具体实现可以通过c++提供的std::function来实现。例如,将fn(可调用对象)、args(相应参数)封装成std::function<void()>。
但是通过调试发现,如果直接使用std::function,会产生若干次不必要的左值拷贝和右值拷贝,因此在本发明的一个实施例中,上述装置中,任务生成单元220,适于利用绑定机制实现对异步任务对象的封装。
该绑定机制与Windows***提供的绑定原理相似,在此不再详细介绍。通过绑定机制替代std::function实现封装,可以减少上面提到的不必要的左值拷贝和右值拷贝。
在本发明的一个实施例中,上述装置中,执行单元230,适于将异步任务对象放入第一目标线程的消息队列,以使第一目标线程在接收到执行信号从消息队列中取出异步任务对象,执行异步任务。
可以看出,这样本线程不需要关心异步任务在目标线程中如何执行,只需要将异步任务对象赋值放入消息队列。这与PostMessage方式的不同是十分明显的,PostMessage仅是传递一个消息,携带的参数有限;而本发明实施例所提供的方式,实现的是任务传递,携带的参数类型和数量都得到了极大的拓展。
有时本线程需要第一目标线程返回执行结果,例如主线程(UI线程)通知子线程执行耗时操作,根据执行结果更新UI。因此在本发明的一个实施例中,上述装置中,任务信息包括执行结果捕捉函数;当执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行执行结果捕获函数,以从第一目标线程捕获异步任务的执行结果。
这里的第二目标线程也可以是本线程。可以看出,执行执行结果捕捉函数的过程依然可以是一个异步过程。这样的好处在于,执行任务的第一目标线程可以不关心需要返回哪些数据,由需要这些数据的第二目标线程执行执行结果捕捉函数即可。
在本发明的一个实施例中,上述装置中,执行结果捕获函数是通过对lambda表达式进行封装得到的。
前文也提到lambda表达式可以作为任务信息。Lambda表达式可以称为匿名函数或是闭包,可以实现在调用处直接执行,不需要提前声明。
在本发明的一个实施例中,上述装置中,执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,第一捕获函数和第二捕获函数为重载函数;类型萃取函数用于对执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
在本实施例中提供了一种对性能再进一步优化的方式,即活用了c++11提供的类型萃取思想,针对执行结果萃取出的类型原型包含参数和不包含参数的两种情况分别进行了特化处理。这里的类型萃取函数可以自定义,也可以适用自带的函数。
在本发明的一个实施例中,上述装置中,执行单元230,还适于判断用于执行任务的第一目标线程是否存在,若不存在,则初始化用于执行任务的第一目标线程。
例如,适用c++11编程设计,利用c++11提供的模板template,一种实现的示例如下:
template<typename Fn,typename...Args>
void ATPostTask(ATID atid,Fn&&fn,Args&&...args);
这里Fn依然代表可调用对象,Args代表可调用对象依赖的参数。ATID是自定义的数字ID,与一个线程相对应,如果执行上述方法时相应的ID不存在,那么说明目标线程不存在,需要初始化一个相应的线程。
下面给出一个具体示例,例如需要在线程ATID_DB上执行Func(a,b),可以有如下几种实现:
1)ATPostTask(ATID_DB,Func,a,b),fn=Func,args=a、b;
2)ATPostTask(ATID_DB,[a,b]{Func(a,b);}),fn=[a,b]{Func(a,b);},args=空;
3)ATPostTask(ATID_DB,[a](B b){Func(a,b);},b),fn=[a](B b){Func(a,b);},args=b;
可以看出,在具体的实现中,参数和可调用对象的设置是十分灵活的。
上述实施例介绍了线程间参数传递,实现异步任务的一些方式。而线程操作的方式并不仅有这一种,下面介绍与网络请求相关的任务是如何实现的。
在客户端程序中,如果需要进行网络通信,发出网络请求,那必然有很多适用场景,通常开发人员会以一个独立的动态链接库dll来实现。网络请求一般伴随着相应的回调处理,通过分析发现,一些开发较差的动态链接库存在如下问题:每一个回调都要定义一个class,造成类***,不可避免地造成了大量内存泄漏问题。并且由于使用时的过度包装,在调用处想要找到回调代码,更是非常非常困难,对开发人员十分不友好。
而利用任务模板来实现能够有效改善上述问题。在本发明的一个实施例中,上述装置中,任务为网络请求任务;任务生成单元220,适于将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
移入一个新的网络请求的格式可以如下所示:Req(url,…fn)。这里,回调函数fn可以利用lambda实现,前面已经介绍过lambda的特性,可以容易看到,在调用处,可以直接找到回调代码,对于开发人员而言,接手其他开发者开发的代码也更容易阅读。
在本发明的一个实施例中,上述装置中,网络请求模板是通过加载的网络请求静态库获得的。这里的网络请求静态库可以是一个dll,在客户端使用时进行加载。
在本发明的一个实施例中,上述装置中,网络请求模板包括如下的一种或多种:从内存读取数据的特化模板;从文件读取数据的特化模板;向内存写入数据的特化模板;向文件写入数据的特化模板。
在本实施例中,考虑到性能的优化,针对网络请求中四类常见情形,分别设置了相应的特化模板,经实践能够极大提升性能。
在本发明的一个实施例中,上述装置中,任务模板包括可变参数模板;任务生成单元220,适于对任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数,根据若干个参数和可变参数模板生成任务。
可变参数模板是c++11提供的新特性,支持泛化,普通模板只可以采取固定数量的模板参数,而通过可变参数模板,理论上可以接收任意数量的模板参数。而作为任务信息的参数可以是多种类型的,可以将其通过类型萃取转换为通用类型。
综上所述,本发明的技术方案,在获取到待执行任务的任务信息后,可以选取与之匹配的任务模板来生成任务,以便在本线程或其他线程来进行执行。该技术方案的有益效果在于,任务模板既支持泛化,比较通用,也支持特化,能够在性能上有所提升,并且对于一个类型的任务可以采用同一任务模板,实现起来简单方便,效率很高。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的线程操作的实现装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图3示出了根据本发明一个实施例的智能终端的结构示意图。该智能终端包括处理器310和被安排成存储计算机可执行指令(计算机可读程序代码)的存储器320。存储器320可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器320具有存储用于执行上述方法中的任何方法步骤的计算机可读程序代码331的存储空间330。例如,用于存储计算机可读程序代码的存储空间330可以包括分别用于实现上面的方法中的各种步骤的各个计算机可读程序代码331。计算机可读程序代码331可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图4所述的计算机可读存储介质。图4示出了根据本发明一个实施例的一种计算机可读存储介质的结构示意图。该计算机可读存储介质400存储有用于执行根据本发明的方法步骤的计算机可读程序代码331,可以被智能终端300的处理器310读取,当计算机可读程序代码331由智能终端300运行时,导致该智能终端300执行上面所描述的方法中的各个步骤,具体来说,该计算机可读存储介质存储的计算机可读程序代码331可以执行上述任一实施例中示出的方法。计算机可读程序代码331可以以适当形式进行压缩。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明的实施例公开了A1、一种线程操作的实现方法,包括:
获取待执行任务的任务信息;
根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
在本线程中执行所述任务,或者通知第一目标线程执行所述任务。
A2、如A1所述的方法,其中,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板。
A3、如A2所述的方法,其中,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类。
A4、如A2所述的方法,其中,所述任务信息包括可调用对象和/或参数,所述根据所述任务信息和选取的任务模板生成任务包括:
将所述任务信息按所述异步任务模板封装为异步任务对象。
A5、如A4所述的方法,其中,所述将所述任务信息按所述异步任务模板封装为异步任务对象包括:
利用绑定机制实现对所述异步任务对象的封装。
A6、如A4所述的方法,其中,所述通知第一目标线程执行所述任务包括:
将所述异步任务对象放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
A7、如A2所述的方法,其中,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
A8、如A7所述的方法,其中,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
A9、如A7或A8所述的方法,其中,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
A10、如A1所述的方法,其中,该方法还包括:
判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
A11、如A1所述的方法,其中,所述任务为网络请求任务;
所述根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务包括:
将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
A12、如A11所述的方法,其中,所述网络请求模板是通过加载的网络请求静态库获得的。
A13、如A11所述的方法,其中,所述网络请求模板包括如下的一种或多种:
从内存读取数据的特化模板;
从文件读取数据的特化模板;
向内存写入数据的特化模板;
向文件写入数据的特化模板。
A14、如A1所述的方法,其中,所述任务模板包括可变参数模板;
所述据所述任务信息和选取的任务模板生成任务包括:
对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数;
根据所述若干个参数和所述可变参数模板生成任务。
A15、如A1所述的方法,其中,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
本发明的实施例还公开了B16、一种线程操作的实现装置,包括:
任务信息获取单元,适于获取待执行任务的任务信息;
任务生成单元,适于根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
执行单元,适于在本线程中执行所述任务,或者通知第一目标线程执行所述任务。
B17、如B16所述的装置,其中,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板。
B18、如B17所述的装置,其中,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类。
B19、如B17所述的装置,其中,所述任务信息包括可调用对象和/或参数;
所述任务生成单元,适于将所述任务信息按所述异步任务模板封装为异步任务对象。
B20、如B19所述的装置,其中,
所述任务生成单元,适于利用绑定机制实现对所述异步任务对象的封装。
B21、如B19所述的装置,其中,
所述执行单元,适于将所述异步任务对象放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
B22、如B17所述的装置,其中,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
B23、如B22所述的装置,其中,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
B24、如B22或B23所述的装置,其中,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
B25、如B16所述的装置,其中,
所述执行单元,还适于判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
B26、如B16所述的装置,其中,所述任务为网络请求任务;
所述任务生成单元,适于将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
B27、如B26所述的装置,其中,所述网络请求模板是通过加载的网络请求静态库获得的。
B28、如B26所述的装置,其中,所述网络请求模板包括如下的一种或多种:从内存读取数据的特化模板;从文件读取数据的特化模板;向内存写入数据的特化模板;向文件写入数据的特化模板。
B29、如B16所述的装置,其中,所述任务模板包括可变参数模板;
所述任务生成单元,适于对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数,根据所述若干个参数和所述可变参数模板生成任务。
B30、如B16所述的装置,其中,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
本发明的实施例还公开了C31、一种智能终端,其中,该智能终端包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如A1-A16中任一项所述的方法。
本发明的实施例还公开了D32、一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如A1-A16中任一项所述的方法。
Claims (26)
1.一种线程操作的实现方法,包括:
获取待执行任务的任务信息;
根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
通知第一目标线程执行所述任务;
其中,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板;所述任务信息包括可调用对象和/或参数,所述根据所述任务信息和选取的任务模板生成任务包括:
将所述任务信息按所述异步任务模板封装为异步任务对象;
所述通知第一目标线程执行所述任务包括:
将所述异步任务对象赋值放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
2.如权利要求1所述的方法,其中,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类;
将所述任务信息按所述异步任务模板封装为异步任务对象。
3.如权利要求1所述的方法,其中,所述将所述任务信息按所述异步任务模板封装为异步任务对象包括:
利用绑定机制实现对所述异步任务对象的封装。
4.如权利要求1所述的方法,其中,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
5.如权利要求4所述的方法,其中,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
6.如权利要求4或5所述的方法,其中,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
7.如权利要求1所述的方法,其中,该方法还包括:
判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
8.如权利要求1所述的方法,其中,所述任务为网络请求任务;
所述根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务包括:
将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
9.如权利要求8所述的方法,其中,所述网络请求模板是通过加载的网络请求静态库获得的。
10.如权利要求8所述的方法,其中,所述网络请求模板包括如下的一种或多种:
从内存读取数据的特化模板;
从文件读取数据的特化模板;
向内存写入数据的特化模板;
向文件写入数据的特化模板。
11.如权利要求1所述的方法,其中,所述任务模板包括可变参数模板;
所述据所述任务信息和选取的任务模板生成任务包括:
对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数;
根据所述若干个参数和所述可变参数模板生成任务。
12.如权利要求1所述的方法,其中,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
13.一种线程操作的实现装置,包括:
任务信息获取单元,适于获取待执行任务的任务信息;
任务生成单元,适于根据所述任务信息选取相匹配的任务模板,以及根据所述任务信息和选取的任务模板生成任务;
执行单元,适于通知第一目标线程执行所述任务;
其中,所述待执行任务为异步任务,与所述任务信息匹配的任务模板为异步任务模板;所述任务信息包括可调用对象和/或参数;
所述任务生成单元,适于将所述任务信息按所述异步任务模板封装为异步任务对象;
所述执行单元,适于将所述异步任务对象赋值放入所述第一目标线程的消息队列,以使所述第一目标线程在接收到执行信号从所述消息队列中取出所述异步任务对象,执行所述异步任务。
14.如权利要求13所述的装置,其中,所述异步任务模板是从指定的异步任务类中获得的,所述异步任务类继承自CWindowImpl类。
15.如权利要求13所述的装置,其中,
所述任务生成单元,适于利用绑定机制实现对所述异步任务对象的封装。
16.如权利要求13所述的装置,其中,所述任务信息包括执行结果捕捉函数;
当所述执行结果捕获函数被第一目标线程调用时,在第二目标线程中执行所述执行结果捕获函数,以从所述第一目标线程捕获所述异步任务的执行结果。
17.如权利要求16所述的装置,其中,所述执行结果捕获函数是通过对lambda表达式进行封装得到的。
18.如权利要求16或17所述的装置,其中,所述执行结果捕获函数包括类型萃取函数、第一捕获函数和第二捕获函数,所述第一捕获函数和第二捕获函数为重载函数;
所述类型萃取函数用于对所述执行结果进行类型萃取,若萃取出的类型原型不包含参数,则利用第一捕获函数进行捕获,若萃取出的类型原型包含参数,则利用第二捕获函数进行捕获。
19.如权利要求13所述的装置,其中,
所述执行单元,还适于判断用于执行所述任务的第一目标线程是否存在,若不存在,则初始化用于执行所述任务的第一目标线程。
20.如权利要求13所述的装置,其中,所述任务为网络请求任务;
所述任务生成单元,适于将网络请求的URL地址和回调函数通过网络请求模板封装为一个网络请求。
21.如权利要求20所述的装置,其中,所述网络请求模板是通过加载的网络请求静态库获得的。
22.如权利要求20所述的装置,其中,所述网络请求模板包括如下的一种或多种:从内存读取数据的特化模板;从文件读取数据的特化模板;向内存写入数据的特化模板;向文件写入数据的特化模板。
23.如权利要求13所述的装置,其中,所述任务模板包括可变参数模板;
所述任务生成单元,适于对所述任务信息进行类型萃取,将任务信息转化为通用类型的若干个参数,根据所述若干个参数和所述可变参数模板生成任务。
24.如权利要求13所述的装置,其中,所述任务信息包括如下的一种或多种:
基本类型对象、lambda表达式、指针、智能指针、普通函数。
25.一种智能终端,其中,该智能终端包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1-12中任一项所述的方法。
26.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810646532.0A CN108829502B (zh) | 2018-06-21 | 2018-06-21 | 线程操作的实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810646532.0A CN108829502B (zh) | 2018-06-21 | 2018-06-21 | 线程操作的实现方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108829502A CN108829502A (zh) | 2018-11-16 |
CN108829502B true CN108829502B (zh) | 2021-11-23 |
Family
ID=64142000
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810646532.0A Active CN108829502B (zh) | 2018-06-21 | 2018-06-21 | 线程操作的实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108829502B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101694626A (zh) * | 2009-09-30 | 2010-04-14 | 曙光信息产业(北京)有限公司 | 脚本执行***及方法 |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
CN103116520A (zh) * | 2012-11-02 | 2013-05-22 | 深圳键桥通讯技术股份有限公司 | 基于tcp/ udp的远程过程调用rpc的方法 |
CN103679800A (zh) * | 2013-11-21 | 2014-03-26 | 北京航空航天大学 | 一种视频图像虚拟场景生成***及其框架构造方法 |
CN103856396A (zh) * | 2012-11-30 | 2014-06-11 | 中兴通讯股份有限公司 | 插件间的报文传递方法及装置、代理插件 |
CN104243274A (zh) * | 2013-06-14 | 2014-12-24 | 亿览在线网络技术(北京)有限公司 | 一种消息处理方法及消息中心*** |
CN105045602A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建Hadoop应用开发框架的方法、装置及电子装置 |
CN105302557A (zh) * | 2015-10-30 | 2016-02-03 | 北京奇虎科技有限公司 | 线程建立及处理的方法及装置 |
CN106371829A (zh) * | 2016-08-24 | 2017-02-01 | 北京邮电大学 | 基于模块化思想的模板框架设计方法及*** |
CN106663246A (zh) * | 2014-08-28 | 2017-05-10 | 谷歌公司 | 用于偏置任务辅助自动完成建议的***和方法 |
CN106873949A (zh) * | 2015-12-11 | 2017-06-20 | 泰康保险集团股份有限公司 | 代码生成方法及其装置 |
CN107315581A (zh) * | 2017-05-23 | 2017-11-03 | 努比亚技术有限公司 | 任务脚本生成装置及方法、任务调度***及方法 |
CN107643889A (zh) * | 2016-07-20 | 2018-01-30 | 平安科技(深圳)有限公司 | 基于模板引擎的页面渲染方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090094606A1 (en) * | 2007-10-04 | 2009-04-09 | National Chung Cheng University | Method for fast XSL transformation on multithreaded environment |
-
2018
- 2018-06-21 CN CN201810646532.0A patent/CN108829502B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101694626A (zh) * | 2009-09-30 | 2010-04-14 | 曙光信息产业(北京)有限公司 | 脚本执行***及方法 |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
CN103116520A (zh) * | 2012-11-02 | 2013-05-22 | 深圳键桥通讯技术股份有限公司 | 基于tcp/ udp的远程过程调用rpc的方法 |
CN103856396A (zh) * | 2012-11-30 | 2014-06-11 | 中兴通讯股份有限公司 | 插件间的报文传递方法及装置、代理插件 |
CN104243274A (zh) * | 2013-06-14 | 2014-12-24 | 亿览在线网络技术(北京)有限公司 | 一种消息处理方法及消息中心*** |
CN103679800A (zh) * | 2013-11-21 | 2014-03-26 | 北京航空航天大学 | 一种视频图像虚拟场景生成***及其框架构造方法 |
CN106663246A (zh) * | 2014-08-28 | 2017-05-10 | 谷歌公司 | 用于偏置任务辅助自动完成建议的***和方法 |
CN105045602A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建Hadoop应用开发框架的方法、装置及电子装置 |
CN105302557A (zh) * | 2015-10-30 | 2016-02-03 | 北京奇虎科技有限公司 | 线程建立及处理的方法及装置 |
CN106873949A (zh) * | 2015-12-11 | 2017-06-20 | 泰康保险集团股份有限公司 | 代码生成方法及其装置 |
CN107643889A (zh) * | 2016-07-20 | 2018-01-30 | 平安科技(深圳)有限公司 | 基于模板引擎的页面渲染方法和装置 |
CN106371829A (zh) * | 2016-08-24 | 2017-02-01 | 北京邮电大学 | 基于模块化思想的模板框架设计方法及*** |
CN107315581A (zh) * | 2017-05-23 | 2017-11-03 | 努比亚技术有限公司 | 任务脚本生成装置及方法、任务调度***及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108829502A (zh) | 2018-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
EP3667496B1 (en) | Distributed computing system, data transmission method and device in distributed computing system | |
CN111176802B (zh) | 任务处理方法、装置、电子设备及存储介质 | |
US20160019072A1 (en) | Dynamic determination of application server runtime classloading | |
CN106462412A (zh) | 动态地产生的基于模式的类的结构识别 | |
CN107133064B (zh) | 原生应用的页面热更新方法及装置 | |
CN110069259B (zh) | 基于idl文件的解析方法、装置、电子设备和存储介质 | |
EP4310667A1 (en) | Ai application deployment method, and related platform, cluster, medium and program product | |
CN108932123B (zh) | 参数处理方法和装置 | |
CN110597564A (zh) | 一种安装包构建和业务组件加载方法、装置、终端设备 | |
JP5811088B2 (ja) | データ処理システム及びデータ処理方法 | |
CN107291619B (zh) | 内存占用分析方法及装置 | |
CN108829502B (zh) | 线程操作的实现方法和装置 | |
Richter et al. | Service-based processing and provisioning of image-abstraction techniques | |
KR20180098584A (ko) | App 프로그램 실행 방법 및 장치 | |
CN111198708A (zh) | 一种jar包冲突解决方法和装置 | |
CN107483399B (zh) | 一种在远程过程调用中的信息封装方法及装置 | |
CN115629795A (zh) | 一种可执行文件的配置方法、装置及电子设备 | |
CN107092601B (zh) | 资源文件构建方法、资源文件应用方法及装置 | |
CN111708519B (zh) | 一种业务组件的处理方法、装置、设备和存储介质 | |
CN115604331A (zh) | 一种数据的处理***、方法以及装置 | |
CN110837367B (zh) | 用户界面处理方法、装置及电子设备 | |
US20210055971A1 (en) | Method and node for managing a request for hardware acceleration by means of an accelerator device | |
CN113485698B (zh) | 渲染代码转换生成方法、装置、计算设备及存储介质 | |
CN112052051A (zh) | 插件处理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |