我在不同的线程(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");
}
答案 0 :(得分:0)
好人,答案很简单。您没有通过多线程获得多核功能。这意味着只有一个处理器正在处理所有线程。因此,当您加载1个动画并且只有1个线程时,没有线程切换。当有2个以上的动画时,处理器正在它们之间切换。这导致更多的时间执行。我的动画图表与情况相同。 成像你通常有1个动画,它应该在1秒内运行而另一个动画通常应该在2秒内运行,然后当你同时加载它们时,两者的结果时间大约是3秒。