асинхронные задачи в реальном времени с какао - PullRequest
0 голосов
/ 01 мая 2011

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

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

Ответы [ 2 ]

1 голос
/ 03 мая 2011

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

0 голосов
/ 07 мая 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);
...