асинхронные задачи в реальном времени с какао

Я делаю мыльный клиент, и мне нужно выполнять некоторые операции, основанные на времени и приоритете.. например.. мне нужно каждые 200 мс обрабатывать вызов x, каждые 2 секунды вызов y и случайный вызов z, который должен иметь максимальный приоритет... но есть еще одна проблема, я могу делать только n вызовов в секунду, ставя в очередь другие вызовы..

Я написал весь процесс потребления мыла, пользовательский интерфейс, но у меня проблемы с диспетчером. Я пробовал очереди отправки, но не могу найти поддержку для этого в реальном времени и ограниченной обработки.. может быть, мне следует написать многопоточная среда для этого?


person Daniel    schedule 30.04.2011    source источник
comment
Реальное время и SOPA? Действительно? Мужик, у тебя есть решимость. Кроме того, почему бы не сказать в своем вопросе, в чем именно заключается ваша проблема? Это производительность? Это обработка? Это очередь? Когда вы говорите ограниченная обработка, означает ли это, что ваша обработка останавливает очередь? Пожалуйста, дополните.   -  person Grzegorz Adam Hankiewicz    schedule 19.05.2012


Ответы (2)


iOS/OSX не являются операционными системами реального времени. Однако взгляните на NSOperationQueue, который должен позволить вам достичь в основном того, что вы ищете, без создания потоков вручную:

person Damien    schedule 03.05.2011

Используйте таймер источника отправки. В любом случае, нет никаких гарантий реального времени.

dispatch_source_t timerX = dispatch_source_create(
    DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
        dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_source_t timerY = dispatch_source_create(
    DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
        dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

dispatch_source_set_timer(timerX,
    dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC),
        DISPATCH_TIME_FOREVER, 0);
dispatch_source_set_timer(timerY,
    dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC),
        DISPATCH_TIME_FOREVER, 0);

dispatch_source_set_event_handler(timerX, ^{
    /* call X */
});
dispatch_source_set_event_handler(timerY, ^{
    /* call Y */
});

dispatch_resume(timerX);
dispatch_resume(timerY);
person Kazuki Sakamoto    schedule 06.05.2011