高分辨率计时器冻结我的应用程序的其余部分

时间:2011-12-27 11:04:23

标签: objective-c xcode

我们有一个很棒的应用程序(涉及cocos2d)。 在我的课程中,我必须实现大约1ms或更短的高分辨率计时器。

计时器类正在运行,但因为我有一段时间(1),应用程序的其余部分甚至没有加载,屏幕是黑色的 - 只处理我的while(1)

这是我的代码:

-(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;}

    }


}

为了让处理器并行处理其他东西,我可以输入什么? 这种方法对于iPhone处理器来说太重了吗? 还有另一种方法可以每隔1ms拨打一次电话吗?

1 个答案:

答案 0 :(得分: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];