2011-12-27 8 views
1

私たちは(cocos2dを含む)素晴らしい作品があります。 私のクラスでは、約1ms以下の高分解能タイマーを実装しなければなりませんでした。高解像度タイマーは、私のアプリケーションの残りの部分をフリーズ

タイマークラスが働いているが、、(1)私はしばらくの間を持っているので、(1)のみ

アプリの残りの部分にもロードされず、画面が私の中で黒-it取引でありますここに私のコードは次のとおりです。

-(void)HighResolutionTimer 
{ 


    while(1) 
    { 
     if(TimerFlag==0) //take time once 
     { 
      start = [NSDate date]; 
      TimerFlag=1;    
     } 


     end= [NSDate date]; //check timer 


     if([end timeIntervalSinceDate:start]*1000.0f >0.5) //wait for 1ms 
     { 
      TimerFlag=0; 
      [self sampleAudio]; //do my job(with NSLog) 
     } 

     if(stopTimer==1) //break 
     {stopTimer=0; break;} 

    } 


} 

この中に何をすることができ、私は入力(1)LETプロセッサに順に並列に他のものを行いますか? この方法はiPhoneのプロセッサにとっては重すぎますか? 1msごとに何かを呼び出す別の方法がありますか?

答えて

0

プロセッサに他の のものを並行して実行させるために、何を入力することができますか(1)

あなたはGCD

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ 
    [self HighResolutionTimer]; 
}); 

を使用して別のスレッドにこのコードを置くことができ、この方法は、iPhoneのプロセッサのために重すぎるのでしょうか?

もちろん、基本的には無限ループです。

1msごとに何かを呼び出す別の方法がありますか?

NSTimerを試しましたか?試してみてください

NSTimer *timer = NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1f 
                target:self 
                selector:@selector(HighResolutionTimer) 
                userInfo:nil 
                repeats:YES]; 
+0

私はそれほど愚かではありません。もう一度読むと、CANTは50msの分解能に達していないので、NSTimerを使用します。私は1ms以下が必要です!だから私は別のやり方でそれをしなければならない。私はあなたが書いたディスパッチコマンドを理解できませんでした。 – Curnelious

+0

どうすれば別のスレッドに入れられますか?私のコードのどこにその行を置く必要がありますか?私はこのスレッドの事を理解できませんでした。 – Curnelious

+0

GCDによるバックグラウンドスレッドの使用の基本については、GCDの参考文献を参照してください。ここでは、参考文献へのリンクを示します。 http://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html – Eugene

関連する問題