从一个调度队列调用代码以在另一个调度队列中运行

时间:2014-12-19 05:27:29

标签: swift grand-central-dispatch core-bluetooth

我在具有高优先级的全局调度队列上运行CBPeripheralManager(它是初始化选项之一)。从该队列中,我创建了一个调度计时器,以在自定义串行队列上执行重复任务。当重复的任务完成后,我从dispatch_async块调用一个成员函数,该块再次指定全局队列。

总而言之,我尝试在全局调度队列上对字段进行委托回调。然后在自定义串行队列中调用重复的定时任务。最后,我想从串行队列中调用一个函数来在全局队列上运行。

最终函数是否在全局队列中的串行队列之外运行?全局队列的dispatch_asyn包含在串行队列块中。

1 个答案:

答案 0 :(得分:2)

您的代码如下,对吧?

let priority = DISPATCH_QUEUE_PRIORITY_HIGH
let globalQueue = dispatch_get_global_queue(priority, 0)
dispatch_async(globalQueue) {

    // 
    // This block is invoked on globalQueue
    // do CBPeripheralManager task
    //

    let serialQueue = dispatch_queue_create("custom", nil)
    let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, serialQueue)
    // set timer
    dispatch_source_set_event_handler(timer) {

        //
        // This block is invoked on serialQueue
        // do task
        // 

        if finishedRepeatedTasks {
            dispatch_async(globalQueue) {

                // (A)
                // This block is invoked on globalQueue
                // call a member function
                //
            }
        }
    }
    dispatch_resume(timer)

}

你是说在全局队列上调用了(A)call a member function