專利名稱:一種非主線程失效方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通信技術(shù)領(lǐng)域,尤其涉及一種非主線程失效方法和裝置。
背景技術(shù):
線程(thread),有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process, LffP),是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針,寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源, 只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。線程分為主線程和非主線程,現(xiàn)有技術(shù)在Cocoa程序(蘋果公司為Mac OS X所創(chuàng)建的原生面向?qū)ο蟮木幊汰h(huán)境)中可以通過NSThread類的方法創(chuàng)建新的線程(非主線程)
+ detachNewThreadSelector:toTarget:withObject:
-initWithTarget: selector: object:
當(dāng)上述創(chuàng)建的線程在特定情況下需要退出時(shí),Nsthread類提供了下列兩種方法
I、采用exit類方法,該方法通常起到的作用只是使主線程退出,卻并不能使特定的線程退出。2、采用cancel對(duì)象方法,該方法相當(dāng)于給線程設(shè)了一個(gè)標(biāo)示位,但并不能立即使線程失效,只有調(diào)用該cancel對(duì)象方法后,主線程才會(huì)退出,但是對(duì)于特定的線程(非主線程),即使調(diào)用該cancel對(duì)象方法后,非主線程仍會(huì)繼續(xù)執(zhí)行,即該方法對(duì)非主線程是無效的。綜上,NSThread類沒有提供使非主線程失效的方法,一些不必要的非主線程一直運(yùn)行導(dǎo)致CPU資源浪費(fèi)。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)中存在的非主線程不能失效所帶來的占用CPU資源的問題, 提供了一種簡單有效的使得非主線程失效的技術(shù),可以避免浪費(fèi)CPU運(yùn)行資源。本發(fā)明提供的一種非主線程失效方法,包括
獲取需要失效的非主線程的地址;
依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);
接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài),若是,則不執(zhí)行對(duì)所述非主線程的操作;若否,則執(zhí)行對(duì)所述非主線程的操作。其中,所述獲取需要失效的非主線程的地址,包括
對(duì)于米用[[NSThread alloc] [initffithTarget: selector:object:]]創(chuàng)建的非主線程,分配一個(gè)空間保存該非主線程的地址,并將所述空間的地址作為該需要失效的非主線程的地址。
另一種實(shí)施方式中,所述獲取需要失效的非主線程的地址,包括
對(duì)于米用[NSThread detachNewThreadSelector: toTarget: withOb ject:]創(chuàng)建的非主線程,在非主線程運(yùn)行的過程中,采用NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址。相應(yīng)的,本發(fā)明還提供了一種非主線程失效裝置,包括
地址獲取模塊,用于獲取需要失效的非主線程的地址;
標(biāo)識(shí)設(shè)置模塊,用于依據(jù)所述地址獲取模塊獲取的需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);
判斷模塊,用于接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài);
操作執(zhí)行模塊,用于在所述判斷模塊判斷為是時(shí),不執(zhí)行對(duì)所述非主線程的操作;在所述判斷模塊判斷為否時(shí),執(zhí)行對(duì)所述非主線程的操作。其中,所述地址模塊具體用于對(duì)于采用[[NSThread alloc] [initffithTarget: sel ector:object:]]創(chuàng)建的非主線程,分配一個(gè)空間保存該非主線程的地址,并將所述空間的地址作為該需要失效的非主線程的地址。另一種實(shí)施例中,所述地址獲取模塊具體用于對(duì)于采用[NSThread detachNewTh readSelector: toTarget: withOb ject:]創(chuàng)建的非主線程,在非主線程運(yùn)行的過程中,采用 NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址。實(shí)施本發(fā)明提供的非主線程失效的方法和裝置,通過獲取需要失效的非主線程的地址,然后對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU 導(dǎo)致的資源浪費(fèi)。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I是本發(fā)明提供的非主線程失效方法實(shí)施例一的流程示意圖2是本發(fā)明提供的非主線程失效方法實(shí)施例二的流程示意圖3是本發(fā)明提供的非主線程失效方法實(shí)施例三的流程示意圖4是本發(fā)明提供的非主線程失效裝置實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明針對(duì)現(xiàn)有技術(shù)中存在的非主線程不能失效所帶來的占用CPU資源的問題, 提供了一種簡單有效的使得非主線程失效的技術(shù),可以避免浪費(fèi)CPU運(yùn)行資源。參見圖1,為本發(fā)明提供的非主線程失效方法實(shí)施例一的流程示意圖。本實(shí)施例一提供的方法,包括步驟100,獲取需要失效的非主線程的地址;
步驟101,依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除 cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);
步驟102,接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài);若是轉(zhuǎn)入步驟103,若否轉(zhuǎn)入步驟104 ;
步驟103,不執(zhí)行對(duì)所述非主線程的操作;
步驟104,執(zhí)行對(duì)所述非主線程的操作。實(shí)施本發(fā)明提供的非主線程失效的方法,通過獲取需要失效的非主線程的地址, 然后對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU導(dǎo)致的資源浪費(fèi)。需要說明的是,非主線程有多種創(chuàng)建方式,因此本發(fā)明中對(duì)于獲取非主線程的地址提供了不同的方法。下面將一一描述。參見圖2,為本發(fā)明提供的非主線程失效方法實(shí)施例二的流程示意圖。本實(shí)施例二提供的方法,包括
步驟 200,對(duì)于米用[[NSThread alloc] [initffithTarget: selector: object:]]創(chuàng)建的非主線程,分配一個(gè)空間保存該非主線程的地址;
步驟201,將所述空間的地址作為該需要失效的非主線程的地址;
步驟202,依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除 cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);具體的,將需要失效的非主線程的標(biāo)識(shí)位“ isCanceled”標(biāo)記為“YES”。步驟203,接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài),也即判斷非主線程的標(biāo)識(shí)位“isCanceled”是否被標(biāo)記為“YES” ;若是轉(zhuǎn)入步驟204,若否轉(zhuǎn)入步驟205 ;
步驟204,不執(zhí)行對(duì)所述非主線程的操作;
步驟205,執(zhí)行對(duì)所述非主線程的操作。參見圖3,為本發(fā)明提供的非主線程失效方法實(shí)施例三的流程示意圖。本實(shí)施例三提供的方法,包括
步驟 300,對(duì)于米用[NSThread detachNewThreadSelector:toTarget:withObjec t:]創(chuàng)建的非主線程,在非主線程運(yùn)行的過程中,采用NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址;
步驟301,依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除 cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);具體的,將需要失效的非主線程的標(biāo)識(shí)位“isCanceled”標(biāo)記為“YES”。步驟302,接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài),也即判斷非主線程的標(biāo)識(shí)位“isCanceled”是否被標(biāo)記為“YES”;若是轉(zhuǎn)入步驟303,若否轉(zhuǎn)入步驟304 ;
步驟303,不執(zhí)行對(duì)所述非主線程的操作;
步驟304,執(zhí)行對(duì)所述非主線程的操作。
5
實(shí)施上述實(shí)施例提供的非主線程失效的方法,對(duì)于通過不同方式創(chuàng)建的非主線程,本發(fā)明都提供了相應(yīng)的方式獲取需要失效的非主線程的地址,然后對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU導(dǎo)致的資源浪費(fèi)。參見圖4,為本發(fā)明提供的非主線程裝置實(shí)施例的結(jié)構(gòu)示意圖。本實(shí)施例提供的非主線程失效裝置,包括
地址獲取模塊10,用于獲取需要失效的非主線程的地址;
標(biāo)識(shí)設(shè)置模塊11,用于依據(jù)所述地址獲取模塊獲取的需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);
判斷模塊12,用于接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài);
操作執(zhí)行模塊13,用于在所述判斷模塊判斷為是時(shí),不執(zhí)行對(duì)所述非主線程的操作; 在所述判斷模塊判斷為否時(shí),執(zhí)行對(duì)所述非主線程的操作。實(shí)施本發(fā)明提供的非主線程失效的裝置,通過地址獲取模塊10獲取需要失效的非主線程的地址,然后通過標(biāo)識(shí)設(shè)置模塊11對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,操作執(zhí)行模塊13對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU導(dǎo)致的資源浪費(fèi)。需要說明的是,非主線程有多種創(chuàng)建方式,因此本發(fā)明中對(duì)于獲取非主線程的地址提供了不同的方法。下面將一一描述。對(duì)于米用[[NSThreadalloc] [initffithTarget: selector: object:]]創(chuàng)建的非主線程,所述地址獲取模塊10首先分配一個(gè)空間保存該非主線程的地址,并將所述空間的地址作為該需要失效的非主線程的地址。另一種實(shí)施例中,對(duì)于米用[NSThreaddetachNewThreadSelector:toTarget:wit hObject:]創(chuàng)建的非主線程,所述地址獲取模塊10具體用于在非主線程運(yùn)行的過程中,采用NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址。實(shí)施上述實(shí)施例提供的非主線程失效裝置,對(duì)于通過不同方式創(chuàng)建的非主線程, 本發(fā)明都提供了相應(yīng)的方式獲取需要失效的非主線程的地址,然后對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU導(dǎo)致的資源浪費(fèi)。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory, RAM)等。以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種非主線程失效方法,其特征在于,包括獲取需要失效的非主線程的地址;依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài),若是,則不執(zhí)行對(duì)所述非主線程的操作;若否,則執(zhí)行對(duì)所述非主線程的操作。
2.如權(quán)利要求I所述的非主線程失效的方法,其特征在于,所述獲取需要失效的非主線程的地址,包括對(duì)于米用[[NSThread alloc] [initffithTarget: selector:object:]]創(chuàng)建的非主線程,分配一個(gè)空間保存該非主線程的地址,并將所述空間的地址作為該需要失效的非主線程的地址。
3.如權(quán)利要求I所述的非主線程失效的方法,其特征在于,所述獲取需要失效的非主線程的地址,包括對(duì)于米用[NSThread detachNewThreadSelector: toTarget: withOb ject:]創(chuàng)建的非主線程,在非主線程運(yùn)行的過程中,采用NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址。
4.一種非主線程失效裝置,其特征在于,包括地址獲取模塊,用于獲取需要失效的非主線程的地址;標(biāo)識(shí)設(shè)置模塊,用于依據(jù)所述地址獲取模塊獲取的需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);判斷模塊,用于接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài);操作執(zhí)行模塊,用于在所述判斷模塊判斷為是時(shí),不執(zhí)行對(duì)所述非主線程的操作;在所述判斷模塊判斷為否時(shí),執(zhí)行對(duì)所述非主線程的操作。
5.如權(quán)利要求4所述的非主線程失效的裝置,其特征在于,所述地址模塊具體用于對(duì)于米用[[NSThread alloc] [initffithTarget: selector: object:]]創(chuàng)建的非主線程,分配一個(gè)空間保存該非主線程的地址,并將所述空間的地址作為該需要失效的非主線程的地址。
6.如權(quán)利要求4所述的非主線程失效的裝置,其特征在于,所述地址獲取模塊具體用于對(duì)于米用[NSThread detachNewThreadSelector: toTarget: withOb ject:]創(chuàng)建的非主線程,在非主線程運(yùn)行的過程中,采用NSThtead類的類方法[NSThread currentThread]獲取該非主線程的地址。
全文摘要
本發(fā)明提供一種非主線程失效方法和裝置,所述方法包括獲取需要失效的非主線程的地址;依據(jù)所述需要失效的非主線程的地址,利用非主線程地址對(duì)象,調(diào)用刪除cancel函數(shù),將所述需要失效的非主線程的狀態(tài)標(biāo)識(shí)位標(biāo)記為刪除狀態(tài);接收到對(duì)所述非主線程進(jìn)行操作時(shí),判斷所述非主線程的狀態(tài)標(biāo)識(shí)位是否為刪除狀態(tài),若是,則不執(zhí)行對(duì)所述非主線程的操作;若否,則執(zhí)行對(duì)所述非主線程的操作。實(shí)施本發(fā)明,通過獲取需要失效的非主線程的地址,然后對(duì)該非主線程的標(biāo)識(shí)位進(jìn)行設(shè)置,在對(duì)非主線程進(jìn)行操作的時(shí)候,對(duì)于標(biāo)志位標(biāo)記為刪除狀態(tài)的非主線程則不執(zhí)行操作,從而使得非主線程失效,避免了非主線程占用CPU導(dǎo)致的資源浪費(fèi)。
文檔編號(hào)G06F9/48GK102609308SQ201110434409
公開日2012年7月25日 申請(qǐng)日期2011年12月22日 優(yōu)先權(quán)日2011年12月22日
發(fā)明者佘軍 申請(qǐng)人:深圳市萬興軟件有限公司