2011-06-20 12 views
0

私のプログラムにスレッドがあります。それはNSTimerによって実行されます。私は自分のNSThreadまたはNSTimerを停止します。それは私のスレッドを停止します。しかし、やはり私のプログラムでスレッドを実行したいときは、前のスレッドは停止していません。したがって、以前のスレッドと現在のスレッドは一緒に実行されます。私のプログラムは以下の通りです。iphone - スレッドが停止していない、なぜプログラムのバックグラウンドで実行されますか?

- (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"); 
} 

私のプログラムには、スレッドを開始するための2つのボタンがあり、別のスレッドはスレッドを停止するためのものです。はじめてスレッドを実行して停止させるには、スレッドを正しく動作させる必要があります。しかし、2回目(スレッドを停止した後)に再びスレッドを実行したいときは、それを表示します。前のスレッドは停止せず、2つのスレッドが同時に実行されます。私を助けてください。

スレッドを停止するにはどうしたらいいですか?スレッドを再び実行したい場合は、前のスレッドではなく新しいスレッドを実行します。

+2

ここでは、スレッドではなくタイマーを停止しています。スレッドに関しては、メソッド本体に関係なく複数のスレッドを実行できます。すなわち、あなたは 'startTimerThread'のために複数のスレッドを持つことができます –

+0

そして実際に新しいスレッドを作成したいのか、それとも前のスレッドを実行したいのでしょうか? –

答えて

1

timerはstopTimerメソッドでのみ停止しています。スレッドはまだ実行中です。 スレッドを停止するには、実行することができます[NSThread exit];

これは "現在の"スレッドを停止します。

スレッドを停止する方法の詳細は、そのクラス参照hereを参照し、「終了」メソッドを確認してください。

メインスレッドで[NSThread exit]を呼び出した場合、メインスレッドは終了します。

関連する問題