Потоки NSStream - PullRequest
       1

Потоки NSStream

2 голосов
/ 30 января 2012

У меня TCP-соединение, которое постоянно открыто для связи с внешним устройством.В канале связи происходит много всего, что иногда приводит к тому, что пользовательский интерфейс перестает отвечать на запросы.

Я бы хотел разместить сообщение в отдельном потоке.Я понимаю detachNewThread и как он называет @selector.Моя проблема в том, что я не уверен, как это будет использоваться в сочетании с чем-то вроде NSStream?

1 Ответ

2 голосов
/ 30 января 2012

Вместо того, чтобы вручную создавать поток и управлять проблемами безопасности потока, вы можете предпочесть использовать Grand Central Dispatch ('GCD'). Это позволяет размещать блоки, которые представляют собой пакеты кода и некоторые состояния, для выполнения вне основного потока и там, где операционная система считает наиболее подходящим. Если вы создадите очередь для последовательной отправки, вы даже можете быть уверены, что если вы разместите новый блок, а старый еще не завершен, система будет ждать его завершения.

* 1003 Е.Г. *

// you'd want to make this an instance variable in a real program
dispatch_queue_t serialDispatchQueue = 
            dispatch_queue_create(
                       "A handy label for debugging",
                       DISPATCH_QUEUE_SERIAL);

...

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"all code in here occurs on the dispatch queue ...");
});

/* lots of other things here */

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"... and this won't happen until after everything already dispatched");
});

...

// cleanup, for when you're done
dispatch_release(serialDispatchQueue);

Очень краткое введение в GCD здесь , более подробное введение Apple также стоит прочитать.

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