2011-02-07 8 views
0

12 피트에서 별도의 스레드 (2에서 5)로 2 차원 애니메이션을 실행 중입니다.
"performSelector : withObject : afterDelay"로 지정된 위치의 지정된 시간에 각 스레드 표시 이미지
1 개의 애니메이션에서는 정상적으로 작동하지만 2 개 이상의 스레드가 동시에 2 개 이상의 애니메이션을 실행하면 애니메이션 속도가 느려집니다 아래로 눈에 띄게.NSThread 메시지 전달을 가속화하십시오.

그것은 2+ 스레드가 스레드 당 초 당 'performSelector'를 동시에 (12)의 주위에 배를 호출 할 때 NSThread은 (afterDelay에) 지정된 것보다 훨씬 더 많은 시간

performSelector:withObject:afterDelay 

걸리는 것으로 나타났다.

NSThread가 performSelector로 대기중인 메시지를 빠르게 수신하도록 구성 할 수 있는지 궁금합니다.
나는 또한 메시지 픽업 속도를 늦추고있는 것이 궁금합니다. 어쩌면 스레드 전환이 느린가요?

다음은

내가 사용 threadMain 코드 주셔서 감사합니다.

- (void) myThreadMain 
{ 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 

    // Add your sources or timers to the run loop and do any other setup.                                                  
    NSRunLoop *runloop = [NSRunLoop currentRunLoop]; 
    [runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 

    do 
    { 
     // Start the run loop but return after each source is handled.                                                   
     SInt32 result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, YES); 

    } 
    while (self.isNeedToExit == false); 

    [pool release]; 

    SYSLOG(LOG_DEBUG, "thread exiting"); 
} 
+0

아이폰 용 (태그가있는 경우) : 귀하의 경우 왜 (특히) 5 개의 작업자 스레드가 하나보다 낫다고 말할 수 있습니까? (여러 경우에 유용 할 수 있습니다.) – justin

+0

여러 개의 백그라운드 스레드에 애니메이션 프레임을 그려야한다는 것을 올바르게 이해 했습니까? – Costique

답변

0

글쎄, 대답은 간단합니다. 다중 스레드를 통해 멀티 코어 기능을 사용하지 마십시오. 즉, 모든 스레드에 대해 하나의 프로세서 만 작동하고 있음을 의미합니다. 따라서 애니메이션 1 개를로드 할 때 스레드가 하나뿐이면 스레드 스위치가 없습니다. 2 광석이있을 때 더 많은 생기 프로세서가 그들 사이를 전환합니다. 따라서 실행 시간이 훨씬 길어집니다. 내 애니메이션 그래프와 같은 상황이 있습니다. 이미징은 일반적으로 1 초에 실행해야하는 애니메이션 1 개를 가지고 있고 다른 애니메이션은 2 초 안에 정상적으로 실행되어야합니다. 둘 다 동시에로드하면 결과 시간은 둘 다 약 3 초가됩니다.