Лучший способ обработки событий C на iPhone и других мобильных устройствах

#c #objective-c #ios

#c #objective-c #iOS

Вопрос:

Я пишу библиотеку C , которая должна будет выполнять некоторую обработку событий. Я намерен вызвать это в среде Android и Android, используя JNI, и я также намерен вызвать его из приложения для iPhone. Итак, я хочу знать лучшую библиотеку или решение C для обработки событий? Мне нужна лицензия типа MIT или BSD. Или, может быть, я мог бы написать это на objective C и распространять на обоих типах устройств? У меня нет Mac, поэтому сейчас нет XCode. Мне нужно простое решение, без проблем с потоками, Без лицензий GPL и т. Д.Или есть способ сделать это на родном C легко без библиотеки. Я ищу рекомендации по этому поводу. Вероятно, он также будет подключаться к SQLite. Спасибо

Комментарии:

1. В чем проблема с лицензией GPL?

2. Это зависит от того, что вы хотите, разве простой шаблон наблюдателя не будет обрабатывать большинство вещей?

3. Ну, во-первых, это GPL 1,2,3 и т.д. Что не так с BSD? или MIT?

4. Я полагаю, это было бы. Я имею в виду, что мне нравится идея обработки событий или команд. Да, я думаю, что observer, вероятно, сработает.

5. Я в основном пытаюсь снизить риски любых потоков или утечек памяти и т.д. Мне также не нравится думать о проблемах лицензирования.

Ответ №1:

Вы можете приготовить что-то очень простое, используя std::tr1::function . Событие может быть просто оболочкой функции:

 #include <tr1/functional>

typedef std::tr1::function<void ()> event;

void my_event_handler()
{
    // handler code here
}

class C {
public:
    void my_method_handler()
    {
        // handler code here
    }
};

int main(int argc, char* argv[])
{
    event ev;
    ev = amp;::handler;  // assign an event handler
    ev();             // fire an event

    // same thing, but using a method as a handler
    C c;
    ev = std::tr1::bind(amp;C::my_method_handler, amp;c);
    ev();
}
  

Приведенный выше код очень переносим, я запускаю что-то подобное на iOS, Android, OSX, Windows и cygwin.