一种非主线程失效方法及装置
技术领域
本发明涉及一种通信技术领域,尤其涉及一种非主线程失效方法和装置。
背景技术
线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
线程分为主线程和非主线程,现有技术在Cocoa程序(苹果公司为Mac OS X所创建的原生面向对象的编程环境)中可以通过NSThread类的方法创建新的线程(非主线程):
+ detachNewThreadSelector:toTarget:withObject:
– initWithTarget:selector:object:
当上述创建的线程在特定情况下需要退出时,Nsthread类提供了下列两种方法:
1、采用exit类方法,该方法通常起到的作用只是使主线程退出,却并不能使特定的线程退出。
2、采用cancel对象方法,该方法相当于给线程设了一个标示位,但并不能立即使线程失效,只有调用该cancel对象方法后,主线程才会退出,但是对于特定的线程(非主线程),即使调用该cancel对象方法后,非主线程仍会继续执行,即该方法对非主线程是无效的。
综上,NSThread类没有提供使非主线程失效的方法,一些不必要的非主线程一直运行导致CPU资源浪费。
发明内容
本发明针对现有技术中存在的非主线程不能失效所带来的占用CPU资源的问题,提供了一种简单有效的使得非主线程失效的技术,可以避免浪费CPU运行资源。
本发明提供的一种非主线程失效方法,包括:
获取需要失效的非主线程的地址;
依据所述需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;
接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态,若是,则不执行对所述非主线程的操作;若否,则执行对所述非主线程的操作。
其中,所述获取需要失效的非主线程的地址,包括:
对于采用[[NSThread alloc][initWithTarget:selector:object:]]创建的非主线程,分配一个空间保存该非主线程的地址,并将所述空间的地址作为该需要失效的非主线程的地址。
另一种实施方式中,所述获取需要失效的非主线程的地址,包括:
对于采用[NSThread detachNewThreadSelector:toTarget:withObject:]创建的非主线程,在非主线程运行的过程中,采用NSThtead类的类方法[NSThread currentThread]获取该非主线程的地址。
相应的,本发明还提供了一种非主线程失效装置,包括:
地址获取模块,用于获取需要失效的非主线程的地址;
标识设置模块,用于依据所述地址获取模块获取的需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;
判断模块,用于接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态;
操作执行模块,用于在所述判断模块判断为是时,不执行对所述非主线程的操作;在所述判断模块判断为否时,执行对所述非主线程的操作。
其中,所述地址模块具体用于对于采用[[NSThread alloc][initWithTarget:selector:object:]]创建的非主线程,分配一个空间保存该非主线程的地址,并将所述空间的地址作为该需要失效的非主线程的地址。
另一种实施例中,所述地址获取模块具体用于对于采用[NSThread detachNewThreadSelector:toTarget:withObject:]创建的非主线程,在非主线程运行的过程中,采用NSThtead类的类方法[NSThread currentThread]获取该非主线程的地址。
实施本发明提供的非主线程失效的方法和装置,通过获取需要失效的非主线程的地址,然后对该非主线程的标识位进行设置,在对非主线程进行操作的时候,对于标志位标记为删除状态的非主线程则不执行操作,从而使得非主线程失效,避免了非主线程占用CPU导致的资源浪费。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的非主线程失效方法实施例一的流程示意图;
图2是本发明提供的非主线程失效方法实施例二的流程示意图;
图3是本发明提供的非主线程失效方法实施例三的流程示意图;
图4是本发明提供的非主线程失效装置实施例的结构示意图。
具体实施方式
本发明针对现有技术中存在的非主线程不能失效所带来的占用CPU资源的问题,提供了一种简单有效的使得非主线程失效的技术,可以避免浪费CPU运行资源。
参见图1,为本发明提供的非主线程失效方法实施例一的流程示意图。
本实施例一提供的方法,包括:
步骤100,获取需要失效的非主线程的地址;
步骤101,依据所述需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;
步骤102,接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态;若是转入步骤103,若否转入步骤104;
步骤103,不执行对所述非主线程的操作;
步骤104,执行对所述非主线程的操作。
实施本发明提供的非主线程失效的方法,通过获取需要失效的非主线程的地址,然后对该非主线程的标识位进行设置,在对非主线程进行操作的时候,对于标志位标记为删除状态的非主线程则不执行操作,从而使得非主线程失效,避免了非主线程占用CPU导致的资源浪费。
需要说明的是,非主线程有多种创建方式,因此本发明中对于获取非主线程的地址提供了不同的方法。下面将一一描述。
参见图2,为本发明提供的非主线程失效方法实施例二的流程示意图。
本实施例二提供的方法,包括:
步骤200,对于采用[[NSThread alloc][initWithTarget:selector:object:]]创建的非主线程,分配一个空间保存该非主线程的地址;
步骤201,将所述空间的地址作为该需要失效的非主线程的地址;
步骤202,依据所述需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;具体的,将需要失效的非主线程的标识位“isCanceled”标记为“YES”。
步骤203,接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态,也即判断非主线程的标识位“isCanceled”是否被标记为“YES”;若是转入步骤204,若否转入步骤205;
步骤204,不执行对所述非主线程的操作;
步骤205,执行对所述非主线程的操作。
参见图3,为本发明提供的非主线程失效方法实施例三的流程示意图。
本实施例三提供的方法,包括:
步骤300,对于采用[NSThread detachNewThreadSelector:toTarget:withObject:]创建的非主线程,在非主线程运行的过程中,采用NSThtead类的类方法[NSThread currentThread]获取该非主线程的地址;
步骤301,依据所述需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;具体的,将需要失效的非主线程的标识位“isCanceled”标记为“YES”。
步骤302,接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态,也即判断非主线程的标识位“isCanceled”是否被标记为“YES”;若是转入步骤303,若否转入步骤304;
步骤303,不执行对所述非主线程的操作;
步骤304,执行对所述非主线程的操作。
实施上述实施例提供的非主线程失效的方法,对于通过不同方式创建的非主线程,本发明都提供了相应的方式获取需要失效的非主线程的地址,然后对该非主线程的标识位进行设置,在对非主线程进行操作的时候,对于标志位标记为删除状态的非主线程则不执行操作,从而使得非主线程失效,避免了非主线程占用CPU导致的资源浪费。
参见图4,为本发明提供的非主线程装置实施例的结构示意图。
本实施例提供的非主线程失效装置,包括:
地址获取模块10,用于获取需要失效的非主线程的地址;
标识设置模块11,用于依据所述地址获取模块获取的需要失效的非主线程的地址,利用非主线程地址对象,调用删除cancel函数,将所述需要失效的非主线程的状态标识位标记为删除状态;
判断模块12,用于接收到对所述非主线程进行操作时,判断所述非主线程的状态标识位是否为删除状态;
操作执行模块13,用于在所述判断模块判断为是时,不执行对所述非主线程的操作;在所述判断模块判断为否时,执行对所述非主线程的操作。
实施本发明提供的非主线程失效的装置,通过地址获取模块10获取需要失效的非主线程的地址,然后通过标识设置模块11对该非主线程的标识位进行设置,在对非主线程进行操作的时候,操作执行模块13对于标志位标记为删除状态的非主线程则不执行操作,从而使得非主线程失效,避免了非主线程占用CPU导致的资源浪费。
需要说明的是,非主线程有多种创建方式,因此本发明中对于获取非主线程的地址提供了不同的方法。下面将一一描述。
对于采用[[NSThread alloc][initWithTarget:selector:object:]]创建的非主线程,所述地址获取模块10首先分配一个空间保存该非主线程的地址,并将所述空间的地址作为该需要失效的非主线程的地址。
另一种实施例中,对于采用[NSThread detachNewThreadSelector:toTarget:withObject:]创建的非主线程,所述地址获取模块10具体用于在非主线程运行的过程中,采用NSThtead类的类方法[NSThread currentThread]获取该非主线程的地址。
实施上述实施例提供的非主线程失效装置,对于通过不同方式创建的非主线程,本发明都提供了相应的方式获取需要失效的非主线程的地址,然后对该非主线程的标识位进行设置,在对非主线程进行操作的时候,对于标志位标记为删除状态的非主线程则不执行操作,从而使得非主线程失效,避免了非主线程占用CPU导致的资源浪费。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。