sleep (1) или sleepForTimeInterval 1 занимает больше 1 секунды для пробуждения - PullRequest
0 голосов
/ 30 июня 2018

Я сталкиваюсь с очень специфической ошибкой, что sleep (1) занимает больше одной секунды для пробуждения, поэтому я попытался заменить sleep () на usleep (), а также [NSThread sleepForTimeInterval: 1.0f], но проблема все еще существует времени он работает, но в среднем за 10 минут он воспроизводим. Я отлаживал NSLogging до и после сна с отметкой времени, также я прилагаю скриншот с Wireshark. Моя цель - провести непрерывный опрос в течение 1 секунды

NSLog(@"4.ProcessHeartBeat: before sleepForTimeInterval check: %@", [formatter stringFromDate:[NSDate date]]);

 [NSThread sleepForTimeInterval: 1.0f];

NSLog(@"5.ProcessHeartBeat: after sleepForTimeInterval check: %@", [formatter stringFromDate:[NSDate date]]);

весь код выполняется в бесконечном потоке, реализованном с использованием NSThread

enter image description here

1 Ответ

0 голосов
/ 30 июня 2018

В общем, опрос плохой. Любой способ не опрашивать?

Спальные темы тоже плохо; действительно следует избегать. Особенно основной поток (не знаю, основной это поток или нет)

В частности, не гарантируется точность всех вариантов сна по разным причинам.

Вы можете попробовать dispatch_after () или NSTimer, но вряд ли это будет более точным. Это, по крайней мере, не спит () поток.

В целом, ваш код должен быть написан так, чтобы он обрабатывал вещи примерно в нужное время, а затем использовал системные часы, чтобы определить, сколько времени фактически прошло. Обратите внимание, что из-за различных приемов управления энергопотреблением и снижения теплового режима скорость самого процессора может быть переменной. Таким образом, такие вещи, как количество тактов, не имеют смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...