Я хотел бы знать, как я могу достичь следующего в Objective-C,NSThread проснувшись
Я делаю связи с FTDI232R модемом с использованием последовательной связи, поэтому я использую POSIX вызов, чтобы открыть, писать и читать путь модема (dev/tty/nameOfModem). Звонки POSIX - это синхронные вызовы, поэтому, читая, я не хочу блокировать свой основной поток, поэтому я думаю, что нужно читать вызов в отдельном потоке.
Я не хочу, чтобы этот вторичный поток работал непрерывно, но просыпался только тогда, когда есть что читать, и после того, как чтение завершено, он должен спать. Я просмотрел документацию и прочитал о предоставлении источника ввода для NSRunLoop и добавив, что runloop во вторичный поток, но не мог понять, как это сделать.
Заранее благодарю вас за вашу помощь.
Спасибо за Ваш ответ и code.I есть вопрос о коде и что кастрированный баран этого кода или блока будет вызываться всякий раз, когда есть данные для чтения в файле ? –
Код не блокируется. Когда есть данные, доступные для чтения в дескрипторе файла, блок обработчика события источника отправки будет отправлен в очередь, указанную при создании источника. В этом примере это одна из глобальных параллельных очередей. Кроме того, дескриптор файла был настроен на неблокирующий режим, поэтому даже вызов 'read()' в блоке обработчика событий не будет блокироваться. Если данных нет, он будет возвращать -1 и устанавливать 'errno' в' EAGAIN' или 'EWOULDBLOCK'. Этого не должно быть, потому что источник не вызвал бы обработчик событий, поэтому он не обрабатывается здесь. –