我们有一个很棒的应用程序(涉及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拨打一次电话吗?
答案 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];