2011-02-07 2 views
0

Я запускаю анимацию 2d при 12 кадрах в секунду в отдельных потоках (от 2 до 5).
Каждое изображение с изображением нити в указанное время в указанном месте «performSelector: withObject: afterDelay»
Он отлично работает для 1 анимации, но как только у меня есть два или более потока для одновременной анимации 2+, анимация замедляется вниз заметно.Ускорение передачи NSThread

Оказывается, что NSThread занимает гораздо больше времени, чем указано (в afterDelay)

performSelector:withObject:afterDelay 

когда 2+ потоки называют «» performSelector одновременно около 12 раз в секунду для каждого потока.

Удивите, могу ли я настроить 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

если это для iPhone (как отмечено): можете ли вы сказать мне, почему (в частности) пять рабочих потоков лучше, чем один в вашем случае? (в некоторых случаях может быть полезно более одного) – justin

+0

Правильно ли я понял вас, что вы рисуете рамки анимации в нескольких фоновых потоках? – Costique

ответ

0

Ну, человек, ответ прост. Вы не получаете многоядерную функциональность через многопоточность. Это означает, что только один процессор работает со всеми вашими потоками. Поэтому, когда вы загружаете 1 анимацию и есть только 1 поток, нет переключателей нитей. Когда есть 2 и более анимаций, процессор переключается между ними. Это приводит к значительно большему времени исполнения. У меня такая же ситуация с моими графиками с анимацией. Imaging у вас обычно 1 анимация, которая должна работать через 1 секунду, а другая анимация должна нормально работать через 2 секунды, а затем, когда вы загружаете оба из них одновременно, время результата будет около 3 секунд для обоих.