0

我在单独的线程(2 到 5)中以 12fps 的速度运行 2d 动画。
每个线程通过“performSelector:withObject:afterDelay”在指定位置在指定时间显示图像
它适用于 1 个动画,但是一旦我有两个或多个线程同时运行 2+ 个动画,动画就会明显变慢。

事实证明,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");
}
4

1 回答 1

0

好吧,答案很简单。您无法通过多线程获得多核功能。这意味着只有一个处理器在处理所有线程。因此,当您加载 1 个动画并且只有 1 个线程时,没有线程切换。当有 2 个或更多动画处理器在它们之间切换时。这导致更多的时间执行。我的动画图表也有同样的情况。成像您通常有 1 个动画应该在 1 秒内运行,而另一个动画通常应该在 2 秒内运行,然后当您同时加载它们时,两者的结果时间约为 3 秒。

于 2011-02-07T08:52:19.683 回答