在我的命令行程序的主要功能中,我创建了一个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/