Запуск кода C в Objective C (Какао) поток (для iOS) - PullRequest
3 голосов
/ 03 февраля 2011

Прежде всего, я очень новый разработчик Objective C / Cocoa для iOS, но раньше я писал приложения на C / C ++.

Итак, мне удалось запустить клиент Rabbitmq-c (http://hg.rabbitmq.com/rabbitmq-c/)) внутри моего приложения для iPhone, и я могу подключиться к Rabbitmq прямо из своего приложения и даже использовать элемент очереди. Так что все хорошо.

Теперь моя проблема в том, что моему приложению для iPhone необходимо использовать библиотеку rabbitmq-c для опроса входящих сообщений с сервера. Вероятно, будет почти бесконечный цикл while.

Должен ли я перенести это в новую ветку? В идеале я хочу обернуть класс rabbitmq-c как целевой класс Async C и использовать NSNotification (или что-то подобное), чтобы уведомить мой пользовательский интерфейс. Я немного опасаюсь создавать новый поток, так как я читаю о таких вещах, как Runloop и т. Д., Которые могут решить множество проблем без использования дополнительного потока.

Какой лучший способ для меня это сделать? Любые примеры кода или направления будут полезны. Пожалуйста, помните, я не имею дело с библиотекой кода Objective C / Coca rabbitmq, я использую код C внутри своего приложения для iPhone.

Спасибо

Subrat

Ответы [ 3 ]

4 голосов
/ 03 февраля 2011

не блокируйте основной поток с помощью опроса вашего сервера.

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

Как только вы получите обновление, опубликуйте уведомление (если вы выбрали NSNotification) из основного потока - UIKit предназначен для работы только из основного потока.

для образцов, я бы начал с образцов, связанных с NSRunLoop и CFRunLoop.

удачи

0 голосов
/ 25 июня 2012

Или другой способ - написать метод для получения сообщений. Этот метод может иметь бесконечный цикл.

Позже вы можете поместить этот метод в фоновый поток следующим образом.

[self executeSelectorInBackground: @selector (receiveMessages) withObject: nil];

0 голосов
/ 03 февраля 2011

Вы также можете создавать собственные делегаты для обновления пользовательского интерфейса или других материалов, связанных с UIKit.

Уведомления могут быть немного проще в кодировании и дают преимущество в том, что несколько объектов могут наблюдать одно уведомление. С делегатами такое невозможно сделать без изменения делегирующего объекта (и это необычно).

Некоторые преимущества делегирования:

Связь между делегирующим объектом и делегатом проясняется, особенно если реализация делегата является обязательной. Если от делегата к делегату необходимо передать более одного типа сообщения, делегирование может сделать это более понятным, указав один метод делегата на сообщение.

...