Я создаю приложение, которое должно выполнять определенную задачу с очень высокой точностью с течением времени (допустимая ошибка составляет +/- 0,001 с).Я знаю, что это очень сильно зависит от реальных задач, однако я не могу сделать это достаточно точным даже для самой основной задачи.Я использую цикл 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,01 до 0,02 с.Например, время между 6.381 и 6.904 составляет 0.523.
Это из-за накладных расходов на отладочную печать?Есть ли способ проверить это лучше?Можно ли это как-то улучшить?Я почти уверен, что не делаю что-то правильно, ошибка слишком велика для такого темпа.