对象的调用方法、装置及终端设备与流程

文档序号:15271031发布日期:2018-08-28 22:25阅读:128来源:国知局

本发明涉及互联网技术领域,具体而言,涉及一种对象的调用方法、装置及终端设备。



背景技术:

在c++编程中,对于一些有生命周期的对象,当需要时就会创建该对象,当该对象不在需要时,就会对其进行释放。我们知道在使用c++的new操作符申请内存时,如果需要申请的内存比较大,那么频繁的申请和释放内存会对程序的性能造成一定的影响。同时,重复地编写创建对象和删除对象的操作需要程序员编写大量代码逻辑相同的程序,极大地浪费了程序人员的时间,浪费了劳动力。



技术实现要素:

本发明的目的在于提供一种对象的调用方法,在提高程序性能的同时,增加代码的复用能力,减少程序人员的工作量。

本发明的另一目的在于提供一种对象的调用装置,在提高程序性能的同时,增加代码的复用能力,减少程序人员的工作量。

本发明的另一目的在于提供一种终端设备,在提高程序性能的同时,增加代码的复用能力,减少程序人员的工作量。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种对象的调用方法,应用于消费者类对生产者类所创建的对象的调用,所述方法包括:定义消费者通用模板;定义生产者通用模板;配置创建的消费者类继承所述消费者通用模板;配置创建的生产者类继承所述生产者通用模板;为消费者类定义成员列表和空闲列表,所述成员列表为被调用的对象的集合,所述空闲列表为未被调用的对象的集合;检测所述成员列表中的对象的第一参数是否符合第一预设值且所述成员列表中的对象的第二参数是否符合第二预设值,若都符合,则所述消费者类将对应的对象从所述成员列表中移动至所述空闲列表中;消费者类在所述空闲列表中查找是否存在未被调用的对象,若存在,则调用所述空闲列表中的一个未被调用的对象。

第二方面,本发明实施例还提供了一种对象的调用装置,应用于消费者类对生产者类所创建的对象的调用,所述装置包括:第一定义模块,用于定义消费者通用模板;第二定义模块,用于定义生产者通用模板;第一配置模块,用于配置创建的消费者类继承所述消费者通用模板;第二配置模块,用于配置创建的生产者类继承所述生产者通用模板;第三定义模块,用于为消费者类定义成员列表和空闲列表,所述成员列表为被调用的对象的集合,所述空闲列表为未被调用的对象的集合;检测模块,用于检测所述成员列表中的对象的第一参数是否符合第一预设值且所述成员列表中的对象的第二参数是否符合第二预设值,若都符合,则所述消费者类将对应的对象从所述成员列表中移动至所述空闲列表中;调用模块,用于消费者类在所述空闲列表中查找是否存在未被调用的对象,若存在,则调用所述空闲列表中的一个未被调用的对象。

第三方面,本发明实施例还提供了一种终端设备,所述终端设备包括存储器和处理器,所述存储器用于存储计算机程序代码,所述处理器用于执行所述存储器内存储的计算机程序代码以实现所述的对象的调用方法。

本发明实施例提供的一种对象的调用方法、装置及终端设备,该对象的调用方法及装置应用于终端设备中,该方法用于消费者类对生产者类所创建的对象的调用。该方法包括:定义消费者通用模板,定义生产者通用模板,配置创建的消费者类继承所述消费者通用模板,配置创建的生产者类继承所述生产者通用模板。进而为消费者类定义成员列表和空闲列表,其中,该成员列表为被调用对象的集合,空闲列表为未被调用对象的集合,然后,检测该成员列表中的对象的第一参数是否符合第一预设值,且该成员列表中的对象的第二参数是否符合第二预设值,若都符合,则消费者类将对应的对象从成员列表中移动至空闲列表中。在实际使用时,该消费者类将在空闲列表中查找是否存在未被调用的对象,若存在,则直接调用该空闲列表中的一个未被调用对象即可,而无需重新创建对象,以提高程序性能。另一方面,由于消费者类和生产者类都是直接继承的通用模板,则程序员无需反复书写一样的代码,提高了代码的可复用性,减少了程序员的工作量。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的一种终端设备的结构示意图。

图2示出了本发明实施例提供的一种对象的调用方法的流程示意图。

图3示出了本发明实施例提供的一种对象的调用装置的功能模块示意图。

图示:100-终端设备;110-对象的调用装置;120-存储器;130-存储控制器;140-处理器;150-外设接口;160-输入输出单元;170-音频单元;180-显示单元;111-第一定义模块;112-第二定义模块;113-第一配置模块;114-第二配置模块;115-第三定义模块;116-检测模块;117-调用模块;118-创建模块。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

现在编程很常见的一种情况是,在一个类中经常需要调用另一个类创建的对象,以实现完整的功能流程,进而将需调用对象的类称之为消费者类,将创建对象的类称之为生产者类。该生产者类在消费者类需要调用的时候创建对象,且该对象在被消费者类使用完毕后将被释放(亦即是删除),其频繁地创建对象和删除对象,将对程序的性能导致不良影响,且每个对象都将占据系统内存,频繁地申请内存和释放内存也容易导致内存碎片,进而影响系统性能。此外,所有消费者类的代码都比较类似,所有生产者类的代码也比较类似,其不同之处仅在于参数不同,亦即是说,在需要编写多个类时,程序员需要付出大量重复的工作,增加了程序员的工作量。因此,本发明实施例提供一种对象的调用方法,以实现对生产者类创建的对象尽可能地重复使用,以减少对象频繁创建和删除的流程,提高程序和系统的性能和提高程序的复用性,减少程序员的工作量。

本发明实施例提供的一种对象的调用方法应用于终端设备,该终端设备可以是,但不限于,电脑等智能电子设备。请参照图1,是本发明实施例提供的一种终端设备100的结构示意图,该终端设备100包括对象的调用装置110、存储器120、存储控制器130、处理器140、外设接口150、输入输出单元160、音频单元170和显示单元180。

所述存储器120、存储控制器130、处理器140、外设接口150、输入输出单元160、音频单元170、显示单元180各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述对象的调用装置110包括至少一个可以软件或固件(firmware)的形式存储于所述存储器120中或固化在所述终端设备100的操作系统(operatingsystem,os)中的软件功能模块。所述处理器140用于执行存储器120中存储的可执行模块,例如所述对象的调用装置110包括的软件功能模块或计算机程序。

其中,存储器120可以是,但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存储器120用于存储程序,所述处理器140在接收到执行指令后,执行所述程序,前述本发明实施例任一实施例揭示的流过程定义的终端设备100所执行的方法可以应用于处理器140中,或者由处理器140实现。

处理器140可能是一种集成电路芯片,具有信号的处理能力。上述的处理器140可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器140也可以是任何常规的处理器140等。

所述外设接口150将各种输入/输出装置耦合至处理器140以及存储器120。在一些实施例中,外设接口150,处理器140以及存储控制器130可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

输入输出单元160用于提供给用户输入数据实现用户与所述数据采集端100的交互。所述输入输出单元160可以是,但不限于,鼠标和键盘等。

音频单元170向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。

显示单元180在终端设备100与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示单元180可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器140进行计算和处理。

请参照图2,是本发明实施例提供的一种对象的调用方法的流程示意图,该方法包括:

步骤s110,定义消费者通用模板。

步骤s120,定义生产者通用模板。

具体为,定义两个通用类,一个是recycler类,一个是recyclableobject类。其中recycler是空闲对象回收器,而recycleobject是可回收的对象。其中recycler类有一个抽象的recycleobject方法用来回收recyclableobject对象。亦即是说,该recycler类为消费者通用模板,其包含所有消费者类共有的流程,recyclableobject类为生产者通用模板,其包含所有生产者类共有的流程。

步骤s130,配置创建的消费者类继承所述消费者通用模板。

步骤s140,配置创建的生产者类继承所述生产者通用模板。

具体为,在实际使用时,将创建的消费者类继承消费者通用模板,将创建的生产者类继承生产者通用模板,进而使得程序员只需要书写一个消费者通用模板和生产者通用模板,则其他所有消费者类和生产者类都无需再重复书写相同的代码,直接继承即可,以提高了代码复用能力,减少了程序员的工作量。

步骤s150,为消费者类定义成员列表和空闲列表,所述成员列表为被调用的对象的集合,所述空闲列表为未被调用的对象的集合。

具体为,在消费者类中添加成员列表和空闲列表,其中成员列表用m_totalblist进行表示,该成员列表为所有被调用的对象的集合;该空闲列表用m_freeblist表示,该空闲列表为未被调用的对象的集合,即该未被调用的对象当前所处的状态为空闲。即是说,对当前已经创建的对象进行分类,将当前被消费者类调用的对象放置于成员列表中,将当前未被消费者类调用的对象放置于空闲列表中。

步骤s160,检测所述成员列表中的对象的第一参数是否符合第一预设值且所述成员列表中的对象的第二参数是否符合第二预设值,若都符合,则所述消费者类将对应的对象从所述成员列表中移动至所述空闲列表中。

其中,该第一参数为引用计数,该引用计数表征该对象被调用的情况,该引用计数用m_ref表示,第二参数为指针成员,该指针成员表征该对象所指向的类,该指针成员用m_a表示。即是说,消费者类调用生产者类的internalrelease函数遍历成员列表中的对象,分析该对象的第一参数,即引用计数,是否符合第一预设值,该第一预设值为0,当引用计数为0时,表明当前对象没有被调用,处于空闲状态;进一步分析该对象的第二参数,即指针成员,是否符合第二预设值,该第二预设值为非0,当对象的指针成员为非0时,则表明当前对象指向之前指向的类,即该对象依旧指向消费者类。

当成员列表中的对象的引用计数为0且该成员列表中的对象的指针成员为非0时,则表明该成员列表中的对象当前并没有被调用且依据指向消费者类,进而消费者类将通过recycle函数将该暂时空闲的对象从成员列表中移动至空闲列表,以方便后续消费者类需调用对象时,直接从空闲列表中进行查找。

作为另一种实施方式,若成员列表中的对象的第一参数符合第一预设值,且所述成员列表中的对象的第二参数不符合第二预设值,则将所述对象释放到系统中。

即是说,该成员列表中的对象的引用计数为0,但是该成员列表中的对象的指针成员为0时,直接将该对象释放到系统中。需要说明的是,该成员列表中的对象的引用计数为0,表明该对象当前处于空闲状态并未被其他线程所调用,该成员列表中的对象的指针成员为0时,表明该对象并未指向之前所指向的类,则此时消费者类可将该对象释放到系统中,即直接将该对象进行删除以减小内存。

容易理解的,若该成员列表中的对象的第一参数,即引用计数,不符合第一预设值(0)时,则表明该对象正在被消费者类的其他线程所调用,未处于空闲状态,则此时消费者类将不会对该对象下一步操作。

步骤s170,消费者类在所述空闲列表中查找是否存在未被调用的对象,若存在,则调用所述空闲列表中的一个未被调用的对象。

即是说,实际操作时,该消费者类将优先在空闲列表m_freeblist中查找是否存在未被调用的对象,若存在,则调用该空闲列表中的一个未被调用的对象进行相应的操作。由于该空闲列表中的对象可能是之前创建的,但是暂处于空闲状态,因此,消费者类在进行下一次操作之前可直接调用该空闲列表中未被调用的对象,进而不必重新创建新的对象,避免了对象的频繁创建和删除,提高了程序的性能。需要说明的是,当该消费者类调用了该空闲列表中的某个未被调用的对象时,同时将该对象从空闲列表中移除,以避免消费者类重复调用相同的对象,引起程序混乱。此外,若是空闲列表中不存在未被调用的对象,则由该生产者类创建一个新的对象,并将该新的对象添加入成员列表中以供所述消费者调用。

请参照图3,是本发明实施例提供的一种对象的调用装置110的功能模块示意图,该装置包括:

第一定义模块111,用于定义消费者通用模板。

在本发明实施例中,步骤s110可以由第一定义模块111执行。

第二定义模块112,用于定义生产者通用模板。

在本发明实施例中,步骤s120可以由第二定义模块112执行。

第一配置模块113,用于配置创建的消费者类继承所述消费者通用模板。

在本发明实施例中,步骤s130可以由第一配置模块113执行。

第二配置模块114,用于配置创建的生产者类继承所述生产者通用模板。

在本发明实施例中,步骤s140可以由第二配置模块114执行。

第三定义模块115,用于为消费者类定义成员列表和空闲列表,所述成员列表为被调用的对象的集合,所述空闲列表为未被调用的对象的集合。

在本发明实施例中,步骤s150可以由第三定义模块115执行。

检测模块116,用于检测所述成员列表中的对象的第一参数是否符合第一预设值且所述成员列表中的对象的第二参数是否符合第二预设值,若都符合,则所述消费者类将对应的对象从所述成员列表中移动至所述空闲列表中。

在本发明实施例中,步骤s160可以由检测模块116执行。

调用模块117,用于消费者类在所述空闲列表中查找是否存在未被调用的对象,若存在,则调用所述空闲列表中的一个未被调用的对象。

在本发明实施例中,步骤s170可以由调用模块117执行。

创建模块118,用于若不存在,则所述生产者类创建一个新的对象并将所述新的对象添加到所述成员列表中以供所述消费者类调用。

由于在对象的调用方法部分已经详细描述,在此不再赘述。

综上所述,本发明实施例提供的一种对象的调用方法、装置及终端设备,该对象的调用方法及装置应用于终端设备中,该方法用于消费者类对生产者类所创建的对象的调用。该方法包括:定义消费者通用模板,定义生产者通用模板,配置创建的消费者类继承所述消费者通用模板,配置创建的生产者类继承所述生产者通用模板。进而为消费者类定义成员列表和空闲列表,其中,该成员列表为被调用对象的集合,空闲列表为未被调用对象的集合,然后,检测该成员列表中的对象的第一参数是否符合第一预设值,且该成员列表中的对象的第二参数是否符合第二预设值,若都符合,则消费者类将对应的对象从成员列表中移动至空闲列表中。在实际使用时,该消费者类将在空闲列表中查找是否存在未被调用的对象,若存在,则直接调用该空闲列表中的一个未被调用对象即可,而无需重新创建对象,以提高程序性能。另一方面,由于消费者类和生产者类都是直接继承的通用模板,则程序员无需反复书写一样的代码,提高了代码的可复用性,减少了程序员的工作量。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1