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



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

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

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

你的代码是这样的,对吧?

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是在全局队列上调用的?

是的。

最新更新