2010-07-18 5 views
0

버튼을 누를 때마다 증가하는 카운터가있는 스레드를 이해하기 위해 기본적인 작업을 수행하려고하며 버튼을 누를 때마다 동일한 카운터를 증가시키는 새로운 스레드가 시작됩니다. 그런 다음 실행중인 스레드를 중지하는 중지 단추가 있습니다. 얼마나 많은 스레드 또는 어떤 스레드가 실행 중인지 어떻게 알 수 있습니까? 여기에 내가 작업하고있는 기본 템플릿이 있습니다. 감사.아이폰에서 여러 스레드를 추적 유지

답변

0

기본적으로 실행중인 스레드 수를 추적하고 각 스레드에 고유 한 ID를 할당하려고합니다. 당신이 스레드를 중지 할 때 다음, 당신은 단지 threadsRunning을 감소

static int threadIndex = 0; 
static int threadsRunning = 0; 

-(void)startThread { 
    NSNumber* threadId = [NSNumber numberWithInt:threadIndex++]; 
    threadsRunning++; 
    [self performSelectorInBackground:@selector(myThread) withObject:threadId]; 
} 

: startThread이 버튼에 대한 이벤트 처리기라고 가정하면, 당신은 같은 것을 할 수도 있습니다.

myThread 메소드와 똑같은 일을하고있는 것 같습니다. 즉, 스레드를 전혀 멈추지 않는 것 같아서 코드를 보았습니다. 귀하의 stopTread 메소드에 혼동을 느낍니다.

+0

[NSThread exit]를 사용 하시겠습니까? 감사. – Crystal

+0

현재 설정이 필요하지 않습니다. 시작하는 쓰레드는'updateDisplay'를 한 번 호출 한 다음 종료합니다. –

0

명시 적으로 스레드를 만드는 것과는 다른 백그라운드에서 작업을 수행하고 있습니다 (예 : 스레드 풀의 스레드를 다시 사용할 수 있음).

당신이 정말 비효율적 스레딩 코드를 원하는 경우, 다음과 같이 사용할 수 있습니다

NSThread * thread = [[[NSThread alloc] initWithTarget:self selector:@selector(myThread) object:nil] autorelease]; 
[thread start]; 
while ([thread isExecuting]) 
{ 
    NSLog(@"Still running"); 
    [NSThread sleepForTimeInterval:0.1]; 
} 

편집 : 당신은 실제로 아이폰 개발을 할 거라면, 나는 NSOperation/NSInvocationOperation 보는 것이 좋습니다/NSBlockOperation을 대신 사용하십시오. 스레드 관리는 옳은 진실한 고통입니다.

관련 문제