0

我正在创建一个运行我的方法之一的新线程:现在我正在做的事情如下:

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadFunc) object:nil];
[thread start];

在我的线程函数中

{
     while(isRunning){
         [self updateSomething];
         [NSThread sleepForTimeInterval:3.0];
     }
     NSLog(@"out");
}

在另一个函数中,我设置isRunning = NOthread = nil[thread cancel]myThreadFunc正在休眠,因此线程无法退出。我该如何控制这种情况?非常感谢。

4

1 回答 1

1

不要使用线程。使用计时器。如果某物很昂贵,请将其分派到主队列以外的某个队列并设置一些状态变量以显示它仍在运行(如果某物不打算同时运行)。然后,只需取消您的计时器。计时器回调函数的一个简单示例可能是:

- (void)doSomething:(NSTimer*)timer
{
  // this assumes that this "something" only ever
  // runs once at a time no matter what, adjust this
  // to an ivar if it's per-class instance or something
  static BOOL alreadyDoingSomething = NO;
  if( alreadyDoingSomething ) return;
  alreadyDoingSomething = YES;
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self updateSomething];
    alreadyDoingSomething = NO;
  });
}

现在,如果您只是取消计时器,它将停止运行。当您准备好再次启动它时,使用此方法安排一个新的计时器作为指定的选择器。要使其行为类似于上面的示例,您可以将计时器间隔设置为三秒。

于 2012-09-20T04:52:17.423 回答