2011-02-07 5 views
0

私は別のスレッド(2〜5)で12fpsで2dアニメーションを実行しています。
"performSelector:withObject:afterDelay"によって指定された位置に指定された時刻に各スレッドが表示される画像
1つのアニメーションで正常に動作しますが、同時に2つ以上のスレッドを実行すると、アニメーションは遅くなります顕著に低下する。NSThreadメッセージの受け渡しを高速化する

それ2+のスレッドがスレッドごとに毎秒12回の周りに同時に「performSelector」を呼び出しているときNSThreadは(afterDelayに)

performSelector:withObject:afterDelay 

を指定したよりもはるかに時間がかかることが判明。

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"); 
} 
+0

iPhone用の場合(タグ付き):あなたのケースで(特に)5つのワーカースレッドが1つより優れている理由を教えてください。 (複数のものが便利な場合もあります) – justin

+0

アニメーションフレームをいくつかのバックグラウンドスレッドで描画することを正しく理解しましたか? – Costique

答えて

0

まあ、答えは簡単です。マルチスレッド機能を使用することはありません。これは、すべてのスレッドで1つのプロセッサしか動作していないことを意味します。したがって、1つのアニメーションをロードしているときにスレッドが1つしかない場合、スレッドスイッチはありません。 2つ以上のアニメーションプロセッサがある場合、それらの間でプロセッサが切り替わります。これははるかに多くの時間の実行につながる。私はアニメーションを使った私のグラフと同じ状況があります。 イメージングでは、通常1秒間に実行するアニメーションが1つあり、他のアニメーションは通常2秒間に実行する必要があります。両方を同時にロードすると、結果時間は両方とも約3秒になります。

関連する問題