Меню StatusItem блокирует основной поток при его открытии. Обходной путь?

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

Я попытался установить элемент состояния из отдельного потока и запланировать сокет в другом потоке, но не в кости. Есть ли хороший способ справиться с этим?

ОБНОВЛЕНИЕ:

Я решил это сейчас. Я использовал оболочку сокета NetSocket, и ее асинхронный характер очень усложнял открыть и посмотреть в другой теме. Я переключился на SmallSockets (другая оболочка сокета Objective-C), и поскольку он синхронный, я смог открыть socket и просто смотрите его прямо в отдельном потоке.


person Moduspwnens    schedule 02.10.2010    source источник


Ответы (1)


Пока пользователь взаимодействует с меню, цикл выполнения выполняется в режиме отслеживания событий. Прикрепите свои сокеты к режиму NSEventTrackingRunLoopMode, и они будут продолжать работать, пока пользователь взаимодействует с меню.

Но размещение сокетов в другом потоке тоже должно работать. Если у вас это не сработало, вы, вероятно, сделали что-то не так, но не видя кода я не могу сказать.

person Sven    schedule 02.10.2010