別のスレッド (2 から 5) で 12 fps で 2D アニメーションを実行しています。
「performSelector:withObject:afterDelay」によって指定された時間に指定された場所に各スレッドが画像を表示します。1
つのアニメーションでは問題なく動作しますが、2 つ以上のアニメーションを同時に実行するスレッドが 2 つ以上になると、アニメーションが著しく遅くなります。
NSThread は、(afterDelay で) 指定されたよりもはるかに多くの時間がかかることが判明しました。
performSelector:withObject:afterDelay
2 つ以上のスレッドが同時に「performSelector」を呼び出している場合、スレッドごとに毎秒約 12 回。
performSelector によってキューに入れられたメッセージをより速く取得するように NSThread を構成できるかどうか疑問に思います。
また、何がメッセージの受信を遅らせているのか疑問に思っています。スレッドの切り替えが遅いかも?
ありがとうございました
以下は、私が使用する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");
}