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

バックグラウンド スレッドから戻ることができます。メンバー変数を 1 つ作成し、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 に答える