У меня есть приложение командной строки на основе какао, которое программно создает NSWindow + NSView. Он использует цикл nextEventMatchingMask для ручной перекачки событий и событий отправки. Этот цикл вызывается некоторым кодом верхнего уровня для опроса для ввода.Накачка конвейера какао из фоновой темы
Если я запустил все в основном потоке, это прекрасно работает, поскольку представление правильно принимает входные события.
Если вместо этого я перемещаю окно создания и цикл сообщений в отдельный поток, то nextEventMatchingMask больше не возвращает никаких событий, и представление не получает вход.
Я знаю, что только «основная» нить в приложении Cocoa должна обрабатывать события. Этот вторичный поток, однако, является единственным потоком, который должен говорить с Cocoa, поэтому я хотел бы использовать его как «основную» нить, насколько это касается Cocoa. Это возможно? Я вызываю NSApplicationLoad из этого потока, и насколько я знаю, это первая функция Cocoa, вызываемая в этом процессе.
Если я не могу указать, что является основным потоком какао, тогда есть ли другой способ создать NSWindow в фоновом потоке и получить для него события? Я не могу сделать что-то вроде вызова NSApplication Run, потому что я не контролирую основной цикл приложения. Мне просто нужно вывести события ввода из окна, когда код верхнего уровня запрашивает, что я это делаю.
Это: http://stackoverflow.com/questions/6178618/mac-os-x-is-it-possible-to-imbue-a-non -main-thread-to-станет-main-thread звучит точно так же, как и моя ситуация. – eodabash