使用cocoa进行实时异步任务

时间:2011-04-30 20:52:47

标签: objective-c multithreading cocoa task-queue grand-central-dispatch

我正在制作一个肥皂客户端,我需要做一些基于时间和优先级的操作..例如..我需要每隔200毫秒处理一次呼叫x,每2秒处理一次呼叫y,以及随意调用z ,应该有最大优先级......但还有另一个问题,我每秒只能进行n次呼叫,排队其他呼叫..

我已经写了所有肥皂消耗过程,用户界面,但我遇到了调度员的问题..我已经尝试过调度队列,但我找不到支持这个实时和有限的处理..也许我应该为此写一个多线程环境吗?

2 个答案:

答案 0 :(得分:1)

iOS / OSX不是Real Time Operating System。但是,看一下NSOperationQueue,它可以让你实现你想要的大部分,而无需亲自手动创建线程:

答案 1 :(得分:0)

使用调度源计时器。无论如何,没有实时保证。

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);