В окнах каждый поток имеет очередь сообщений, и каждая очередь сообщений обрабатывает сообщения для окон, принадлежащих этому потоку. Это означает, что написать приложение, в котором вы можете создать поток, с контуром сообщения и одним (или более) окном, достаточно просто. Игнорируя любые проблемы с приложениями, теперь у вас есть окна приложений, которые будут продолжать взаимодействовать с пользователем, даже если одно из других окон занято какой-то модальной операцией.Какао, окна и нитки?
Теперь, портируя приложение на какао, я столкнулся, ну, Интерфейс Builder. Это неожиданность для тех, кто ожидает больше контроля над созданием окон и построением конвейера сообщений. Тем не менее я вижу, откуда ИБ.
Моя проблема, однако, заключается в непрозрачном функционале NSApplicationMain(). Это - в главном потоке приложений автоматически создает главное окно приложений и запускает насос сообщений, все данные управляются из файлов NIB.
Однако это оставляет мне проблему: даже если я покупаю идею о том, что Interface Builder - это способ сделать мое главное окно приложения - и я вычислил достаточно объектив C для создания подкадров на лету - а также как создавать потоки - я могу посмотреть, как создать насос сообщений в рабочих потоках. Я начинаю сомневаться в его возможности.
У окон в какао даже есть сходство нитей, которые они делают в Win32? то есть каждый поток имеет свой собственный цикл диспетчеризации сообщений для окон, принадлежащих этому потоку? Я начинаю подозревать, что, возможно, Cocoa ожидает, что все мои окна будут «принадлежать» основному потоку, и я просто получу смещение работы (и рисования) на другие потоки.
Любые подсказки относительно того, как лучше всего перевести приложение Win32 с несколькими окнами на строку для парадигм Cocoa?
tl; dr версия: «Cocoa - это однопоточный набор инструментов пользовательского интерфейса, такой как WPF, работает над другими потоками» –
Симпатичный, но неправильный. Какао на самом деле имеет кучу поддержки многопоточности, включая многопоточный чертеж. То, что он не делает, - это иметь несколько потоков, обрабатывающих события независимо (потому что, в основном, это не имеет смысла). – bbum
@bbum вот что я имел в виду, что, если вы не нажмете его, у Cocoa будет 1 цикл событий для обработки пользовательских интерфейсов. Мой tl; dr; версия была не так хорошо объяснена, но я старался держать ее в курсе :) –