Какао, окна и темы? - PullRequest
       5

Какао, окна и темы?

5 голосов
/ 14 января 2010

В окнах каждый поток имеет очередь сообщений, и каждая очередь сообщений будет обрабатывать сообщения для окон, принадлежащих этому потоку. Это означает, что довольно просто написать приложение, в котором вы можете создать поток с циклом сообщений и одним (или более) окнами. Игнорируя любые проблемы с приложениями, теперь у каждого есть окна приложений, которые будут продолжать взаимодействовать с пользователем, даже если одно из других окон занято в какой-либо модальной операции.

Теперь, портируя приложение на какао, я сталкиваюсь с Интерфейсным Разработчиком. Что является неожиданностью для тех, кто ожидает большего контроля над созданием окон и созданием цикла сообщений. Тем не менее я вижу, откуда исходит ИБ.

Однако моя проблема заключается в непрозрачной функции NSApplicationMain (). Это - в главном потоке приложений, автоматически создает главное окно приложений и запускает насос сообщений, все данные аккуратно извлекаются из файлов NIB.

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

Есть ли у окон в какао сродство нитей, которое они имеют в Win32? каждый поток имеет свой собственный цикл диспетчеризации сообщений для окон, принадлежащих этому потоку? Я начинаю подозревать, что, возможно, Какао ожидает, что все мои окна будут «принадлежать» основному потоку, и я просто получаю смещение работы (и рисования) на другие потоки.

Есть какие-нибудь подсказки относительно того, как лучше всего перевести приложение Win32 с несколькими окнами на поток в парадигмы Какао?

1 Ответ

9 голосов
/ 14 января 2010

Интерфейсный Разработчик - красная сельдь в этом обсуждении. Настоящий вопрос касается шаблонов проектирования Какао, и эти два абзаца из вашего вопроса являются ключевыми:

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

У окон в какао даже есть вид сродства потоков они делают в Win32? каждый поток имеет свое сообщение диспетчерская петля для окон, принадлежащих что нить? Я начинаю подозревать что, возможно, Какао ожидает, что все мои окна будут «принадлежать» главному нить и я просто получить офсетную работу (и рисование) на другие темы.

Короче говоря, нет, это так не работает. У Cocoa совершенно другая модель обработки событий и совершенно другой набор инструментов для поддержки параллелизма.

Примечательно, что у Cocoa есть четкое представление о цикле основного события , который запускает всегда в главном потоке. Это где пользовательские события обрабатываются и где происходит почти все рисование (хотя это ограничение было ослаблено с течением времени).

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

Теперь, Какао имеет циклов выполнения на поток. Но они не используются для обработки пользовательских событий.

Короче говоря, вам нужно будет пересмотреть архитектуру вашего приложения, чтобы перенести код в Cocoa. Прямой порт не возможен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...