iphone - 线程没有停止,为什么它在我的程序背景上运行。

时间:2011-06-20 03:49:01

标签: iphone nstimer nsthread

我的程序中有一个帖子。它由NSTimer运行。当我停止我的NSThread或NSTimer时。它阻止我的线程。但是,当我再次想要在我的程序中运行该线程时,它向我显示,前一个线程并未停止。所以先前的线程和当前线程一起运行。我的计划如下。

- (void) startTimer{
    timerThread = [[NSThread alloc] 
                             initWithTarget:self 
                             selector:@selector(startTimerThread) object:nil];

    [timerThread start];
}

-(void) startTimerThread{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
    timer = [[NSTimer scheduledTimerWithTimeInterval: 2.0
                                      target: self
                                    selector: @selector(timerTick:)
                                    userInfo: nil
                                     repeats: YES] retain];

    [runLoop run];
    [pool release];
}

- (void)stopTimer{

    [timer invalidate];
    [timer release];
    timer = nil;
}

- (void)timerTick:(NSTimer *)timer
{
    NSLog(@"THik");
}

我的程序有两个按钮,一个用于启动线程另一个用于停止线程。第一次运行和停止线程它正常工作。但第二次(停止线程后)当我再次想要运行该线程时,它告诉我,前一个线程没有停止,并且两个线程同时运行。请帮我。

我如何停止一个线程,当我想再次运行该线程时,它运行一个新线程而不是前一个线程。

1 个答案:

答案 0 :(得分:1)

您只是在stopTimer方法中停止计时器。线程仍在执行中。 要停止某个主题,您可以执行[NSThread exit];

这将停止“当前”线程。

要了解有关停止线程的更多信息,请参阅其类引用here并查看“退出”方法。

因此,如果在主线程上调用[NSThread exit],它将退出主线程。