1

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

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

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

2 回答 2

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

  ... }
...
}
于 2012-09-10T13:17:35.533 回答
0

阅读终止线程下的线程编程指南。本质上是创建一个新线程并在其上运行代码。performSelectorInBackground:withObject:

于 2012-09-10T13:02:30.460 回答