Система управления событиями Cocoa: где выполняются фоновые задачи? - PullRequest
2 голосов
/ 12 января 2012

В Mac OS X Какао управляется событиями. Под этим я подразумеваю, что каждая вещь управляется пользовательским интерфейсом - пользователь, щелкающий что-либо или перемещающийся по определенной области, приводит к вызову обработчика события. Main просто вызывает NSApplicationMain (), который создает бесконечный цикл до выхода из программы.

А как насчет задач, которые не управляются пользователем? Где бы я поставил задачи, которые должны работать в фоновом режиме, чтобы обеспечить основные функции программы? Например, Photo Booth делает определенные вещи, когда пользователь взаимодействует с пользовательским интерфейсом (то есть переключается на видеокамеру, когда пользователь нажимает на определенную кнопку). Однако Photo Booth также непрерывно извлекает кадры из камеры, чтобы обеспечить видеопоток.

Итак, мой вопрос: куда идет код задач, не связанных с пользовательским интерфейсом? Функция Main () на самом деле невозможна, поскольку мне нужно, чтобы задачи выполнялись в течение всей жизни программы, а не когда она только запускается.

Я работаю в Mac OS X Snow Leopard (хотя я хочу что-то, что работает на всех системах Mac: то есть в Lion OS X) и использую приложение Obj-C Cocoa в Xcode.

1 Ответ

8 голосов
/ 12 января 2012

Любое приложение Приложение на основе какао имеет доступ к использованию RunLoops .

Любая работа, которую захочет выполнить ваше приложение, будет использовать RunLoop для выполнения. Обычно это делается в других потоках, но если работа достаточно легкая, чтобы не блокировать поток пользовательского интерфейса, вы можете запустить свой код в RunLoop основных потоков.

Я рекомендую прочитать Руководство по программированию нитей Apple для получения дополнительной информации.

С помощью Grand Central Dispatch модели программирования были изменены, чтобы использовать современные многоядерные системы, поэтому можно определить задачу и заставить ОС управлять ее выполнением.

...