В окнах каждый поток имеет очередь сообщений, и каждая очередь сообщений будет обрабатывать сообщения для окон, принадлежащих этому потоку.
Это означает, что довольно просто написать приложение, в котором вы можете создать поток с циклом сообщений и одним (или более) окнами. Игнорируя любые проблемы с приложениями, теперь у каждого есть окна приложений, которые будут продолжать взаимодействовать с пользователем, даже если одно из других окон занято в какой-либо модальной операции.
Теперь, портируя приложение на какао, я сталкиваюсь с Интерфейсным Разработчиком. Что является неожиданностью для тех, кто ожидает большего контроля над созданием окон и созданием цикла сообщений. Тем не менее я вижу, откуда исходит ИБ.
Однако моя проблема заключается в непрозрачной функции NSApplicationMain (). Это - в главном потоке приложений, автоматически создает главное окно приложений и запускает насос сообщений, все данные аккуратно извлекаются из файлов NIB.
Однако, это оставляет меня с проблемой: даже если я верю в идею, что Interface Builder - это способ сделать главное окно моего приложения - и я выяснил, достаточно ли цели C для создания подокон на лету - а также как создавать потоки - я могу видеть, как создать насос сообщений в рабочих потоках. Я начинаю сомневаться в его возможности.
Есть ли у окон в какао сродство нитей, которое они имеют в Win32? каждый поток имеет свой собственный цикл диспетчеризации сообщений для окон, принадлежащих этому потоку? Я начинаю подозревать, что, возможно, Какао ожидает, что все мои окна будут «принадлежать» основному потоку, и я просто получаю смещение работы (и рисования) на другие потоки.
Есть какие-нибудь подсказки относительно того, как лучше всего перевести приложение Win32 с несколькими окнами на поток в парадигмы Какао?