如何终止循环/线程

时间:2012-09-10 13:00:05

标签: objective-c multithreading cocoa

这是我的计划的一部分。按下按钮后,findDuplicates中的循环在后台线程中启动。有没有办法通过按另一个按钮来停止/杀死线程/循环?

- (IBAction)countDups:(id)sender {
   [self performSelectorInBackground:@selector(findDuplicates) withObject:nil];
}

-(void)findDuplicates
{
...
 for(int index=0;index<self.resultList.count;index++)
 { ... }
...
}

2 个答案:

答案 0 :(得分:2)

您可以从后台线程返回。创建一个成员变量,用NO初始化它。

- (IBAction)countDups:(id)sender {
   mCancel = NO;
   [self performSelectorInBackground:@selector(findDuplicates) withObject:nil];
}

-(IBAction)stop
{
  mCancel = YES; //BOOL member variable;
}

-(void)findDuplicates
{
...
 for(int index=0;index<self.resultList.count;index++)
 { 
   If(mCancel)
   return; // return for thread to end

  ... }
...
}

答案 1 :(得分:0)

终止帖子下的Threading Programming Guide中阅读。 performSelectorInBackground:withObject:本质上创建一个新线程并在其上运行代码。