2014-10-27 1 views
2

Я пишу приложение, которое собирается отправлять/получать данные по tcp-соединениям, и я хотел запланировать чтение/запись в цикле выполнения другого потока. Значение Thread 1 создает соединение и планирует его в цикле выполнения Thread 2. Я не могу найти какой-либо способ доступа к циклу запуска другого потока, поэтому я написал фрагмент кода, который будет запускать вторичный поток, который будет хранить его цикл запуска в глобально доступном месте. Я хотел бы знать, правильно ли это сделать, или если есть какой-либо другой/лучший способ сделать то же самое, а также, если способ, которым я это сделал, вызовет проблемы, такие как доступ к циклу запуска, не являющийся потокобезопасным и вызывающий если я попытаюсь запланировать несколько вещей в цикле выполнения одного потока из нескольких потоков.Как мне запланировать что-то в runloop другого потока?

Что-то вроде следующего.

[NSRunLoop currentRunLoop] -> Это можно сделать из нити которого runloop Я хочу получить доступ к

NSRunLoop * secondthreadrunloop = [secondthread getRunLoop]; -> Но есть ли что-нибудь подобное?

+0

Если вам нужно создать приложение, использующее TCP, я бы настоятельно рекомендовал использовать эту библиотеку https://github.com/robbiehanson/CocoaAsyncSocket, вместо того чтобы писать все самостоятельно. сэкономит много работы и нервов ... – nburk

+0

Мне не разрешено использовать ничего, кроме того, что предоставляет яблоко. Спасибо хоть. – Shehzan

+0

Взгляните на «Grand Central Dispatch» (GCD) и функции dispatch_sync, dispatch_async и dispatch_once – TheDarkKnight

ответ

0

Недавно я столкнулся с той же проблемой, и кажется, что ответ - нет, вы не можете планировать что-либо на NSRunLoop, запущенном в другом потоке. Apple говорит, что NSRunLoop не является потокобезопасным, что означает, что привязка к нему экземпляра NSTimer приведет к неопределенному поведению (я проверил его, в моем случае он случайным образом генерирует сбои).

Что может быть сделано, это запланировать повторение таймера из самого потока фона и заставить его подобрать работу, которую вы хотите, чтобы она выполнялась из некоторого атомного свойства.

Смежные вопросы