优化快速重复呼叫的提示(Objective-C,iPhone)?

时间:2011-03-26 10:30:59

标签: iphone objective-c ios optimization nstimer

我构建了一个必须以非常高的准确度执行某项任务的应用程序(接受错误为+/- 0.001s)。我知道这很大程度上取决于实际的任务,但即使是最基本的任务,我也无法做到足够精确。我在一个单独的线程上使用while循环(使用NSOperation),如下面的代码所述。我遇到的问题是,尽管任务以低速重复,但错误对于连续步骤来说非常大,为0.02或0.01(见第二部分)。

while (!self.isCancelled) {         
    NSLog(@"run");
    [NSThread sleepForTimeInterval:0.5];
}

输出是:

2011-03-26 12:17:03.836 Test[388:c6c7] run
2011-03-26 12:17:04.344 Test[388:c6c7] run
2011-03-26 12:17:04.852 Test[388:c6c7] run
2011-03-26 12:17:05.373 Test[388:c6c7] run
2011-03-26 12:17:05.880 Test[388:c6c7] run
2011-03-26 12:17:06.381 Test[388:c6c7] run
2011-03-26 12:17:06.904 Test[388:c6c7] run

了解误差如何从0.01s变为0.02s。例如,在6.381和6.904之间的时间 0.523

这是因为调试打印时间开销?有没有办法更好地测试它?这可以以某种方式得到改善吗?我很确定我没有做正确的事情,这个错误对于这样的节奏来说是很大的。

2 个答案:

答案 0 :(得分:4)

如果您希望每隔一段时间重复一次,可以使用:

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

我认为您的代码问题可能是它正在执行,然后在0.5秒后定时关闭,因此实际时间间隔为executionTimeForFunction + 0.5

就此而言,我似乎记得NSLog实际上很慢。

答案 1 :(得分:1)

这不是实时操作系统。 1ms是不现实的。