【问题标题】:real time asynchronous tasks with cocoa可可的实时异步任务
【发布时间】:2011-04-30 20:52:47
【问题描述】:

我正在制作一个肥皂客户端,我需要做一些基于时间和优先级的操作..例如..我需要每 200 毫秒处理一次呼叫 x,每 2 秒处理一次呼叫 y,以及偶然的呼叫 z ,应该有最高优先级...但是还有另一个问题,我每秒只能拨打 n 次电话,将其他电话排队..

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

【问题讨论】:

  • 实时和 SOPA?真的吗?人,你有决心。此外,为什么不在您的问题中说明您的问题到底是什么?是性能吗?是加工吗?是排队吗?当您说有限处理时,这是否意味着您的处理会停止队列?请详细说明。

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


【解决方案1】:

iOS/OSX 不是 Real Time Operating System 的。但是,看看 NSOperationQueue ,它应该可以让您实现大部分您正在寻找的东西,而无需自己手动创建线程:

【讨论】:

    【解决方案2】:

    使用调度源计时器。在任何情况下,都没有实时保证。

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

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多