2012-02-06 130 views
0

在我的應用我使用此代碼開始NSThreadIOS:停止通用線程

[NSThread detachNewThreadSelector:@selector(threadStart) toTarget:self withObject:nil]; 


- (void)threadStart 
{ 
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 

//something to do... 

[pool release]; 
} 

我的問題是,我想啓動和停止,有時這個線程,然後我要聲明在.H線程,有一個通用線程...有可能嗎?

回答

0

停止執行線程的正確方法是很好地要求它停止執行。然後,在你的線索中,你會聽取這樣的要求,並在適當的時候服從他們。

根據Apple's Thread Programming Guide

雖然可可,POSIX,和多服務提供了直接殺死線程的例程,使用這些例程的強烈反對。殺死一個線程可以防止線程自行清理。由該線程分配的內存可能會泄漏,並且線程當前正在使用的任何其他資源可能無法正確清理,從而在稍後創建潛在問題。

如果您預計需要在操作過程中終止線程,則應該從一開始就設計線程以響應取消或退出消息。對於長時間運行的操作,這可能意味着要定期停止工作並檢查是否收到了這樣的消息。如果消息確實要求線程退出,線程將有機會執行任何需要的清理並正常退出;否則,它可能會重新開始工作並處理下一塊數據。

您既可以使用[NSThread exit];在你的線程停止本身即取消當前線程,

,或者您也可以使用[NSThread cancel]method信號另一個線程在你的程序中取消..

0

你不清楚你在問什麼。線程無法從另一個線程(安全地)停止。有幾種方法可以在後臺線程上工作並管理其他線程的生命週期。

你應該描述你想要完成的事情。爲什麼你想停止後臺線程?有沒有工作要做?