在Cocoa中用信号通知循环退出线程的最佳方法是什么?

时间:2012-06-20 22:10:29

标签: multithreading cocoa grand-central-dispatch

我有一个方法(让我们称之为运行):

- (void)run
{
    // Do some initialisation

    // Loop until another thread signals it to exit
    while (SHOULD_STILL_LOOP) { ... }

    // Clean up code
}

我称之为:

[self performSelectorInBackground:@selector(run)];

实施SHOULD_STILL_LOOP的最佳方法是什么?我应该使用原子属性,NSCondition,调度信号量吗?

也许一些堆叠可以给我一些建议?

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,就是使用NSThread。

- (void)run:(id)obj
{
    while(![[NSThread currentThread] isCancelled]) { ... }
}

- (void)start
{
    self.thread = [[NSThread alloc] initWithTarget:self
                                          selector:@selector(run)
                                            object:self.object];
    [self.thread start];
}

- (void)stop
{
    [self.thread cancel];
    self.thread = nil;
}