2011-02-07 107 views
0

我在单独的线程(2到5)中以12fps运行2d动画。
每个线程在指定位置通过“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 2011-02-07 07:07:42

回答

0

那么男人,答案很简单。您不通过多线程获得多核功能。这意味着只有一个处理器正在处理所有的线程。所以当你加载1个动画并且只有1个线程时,没有线程切换。当有两个或更多的动画处理器在它们之间切换时。这导致更多的时间执行。我的动画与我的图形有相同的情况。 成像通常有1个动画应该在1秒内运行,另一个动画通常应该在2秒内运行,然后当你同时加载它们时,两者的结果时间约为3秒。