在我的命令行程序的主要功能中,我创建了一个NSThread子类的新实例,并在其上调用start,该实例在另一个线程中运行计时器。如果用户想停止计时器,则输入“stop”,我也希望它也结束线程。

我将如何去做呢?我正在收集我应该在线程上调用cancel的信息,然后在main子类的NSThread中检查isCancelled是否为YES,但是据我所知,main仅在最初调用start时才被调用。我看不出还有什么地方可以检查isCancelled来调用[NSThread exit]

我应该如何处理退出此NSThread?

最佳答案

您可以在isCancelled子类中检查NSThread。您可以在isCancelled子类的整个代码中检查NSThread。当您调用cancel时,您的NSThread子类将继续运行,直到对isCancelled进行检查为止。您要做的是将isCancelled检查放置在多个位置,希望当您调用cancel时会碰到isCancelled检查并尽快退出。

从您发布的示例代码中,我将TimerThread.m更改为如下所示,并且工作正常:

#import "TimerThread.h"
#import "Giraffe.h"

@interface TimerThread () {
    Giraffe *giraffe;
}

@end

@implementation TimerThread

- (void)main {

    if (self.isCancelled)
        return;

    giraffe = [[Giraffe alloc] init];

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(calculate:) userInfo:nil repeats:YES];

    [[NSRunLoop currentRunLoop] run];
}

- (void)calculate:(NSTimer*)timer {
    if (self.isCancelled) {

        [timer invalidate];

        return;
    }

    [giraffe calculateValues:timer];
}

@end

关于ios - 在main中,我产生了一个新的NSThread,在main中,当满足条件时,我想停止线程。如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21142381/

10-10 09:31