Меню StatusItem блокирует основной поток при его открытии. Обходной путь? - PullRequest
2 голосов
/ 02 октября 2010

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

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

UPDATE:

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

1 Ответ

2 голосов
/ 02 октября 2010

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

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

...