iPhone MultiThreading: список / очередь - PullRequest
2 голосов
/ 29 марта 2011

Я наконец-то запустил приложение iPhone telnet для отправки текстовых команд на устройство, над которым я работаю, но устройство работает не так быстро, как хотелось бы.

На данный момент, когда я нажимаю кнопку, телефон отправляет текстовую команду на IP-адрес устройства. Я хочу изменить это так, чтобы постоянный процесс работал и проверял очередь каждые 0,25 секунды. Если в очереди есть какие-либо элементы, которые она будет отправлять, подождите 0,25 секунды и проверьте снова.

Мое первоначальное предположение состоит в том, что я должен проверить некоторые библиотеки потоков iPhone, чтобы кнопки, добавляемые в очередь, и метод отправки / проверки могли быть в отдельных потоках.

Я смотрел на Ссылку iOS специально на Очередь операций и Очередь отправки. Эти очереди - то, на что я должен смотреть, или я полностью отсюда?

UPDATE

Я думаю, что нашел то, что хочу, в NSThread, однако я читаю NSMutableArray, не является поточно-ориентированным. Есть ли в списке c очередь или вектор типа списка, который является потокобезопасным?

ОБНОВЛЕНИЕ 2 :

Могу ли я использовать изменяемый массив и устанавливать вокруг него блокировку {} каждый раз, когда я добавляю или удаляю объекты?

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Вы на правильном пути. Запуск задания через регулярные промежутки времени звучит как задание для NSTimer . Чтобы получить такое поведение, попробуйте создать таймер следующим образом:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(doTask) userInfo:nil repeats:YES];

Установите для этого объекта переменную экземпляра, и он будет запускаться -doTask каждые 0,25 секунды. Что касается ваших фоновых операций, вероятно, ваши лучшие ставки - NSOperation и NSOperationQueue . Создайте пользовательский подкласс NSOperation и переопределите соответствующие методы для запуска задачи в фоновом режиме.

0 голосов
/ 29 марта 2011

Почему бы не запустить команду немедленно с помощью асинхронного метода?

По моему опыту, позволить платформе обрабатывать многопоточность - почти всегда правильная идея.

0 голосов
/ 29 марта 2011

GCD было бы лучшим решением, NSTimers на самом деле не так хороши для периодических задач. Проверьте документацию dispatch_after.

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