DanMuKu GCD

2020-01-21  本文已影响0人  老猫_2017
// main thread excute
static inline void onMainThreadAsync(void (^block)()) {
    if ([NSThread isMainThread]) block();
    else dispatch_async(dispatch_get_main_queue(), block);
}

        
_renderQueue = dispatch_queue_create("com.olinone.danmaku.renderQueue", DISPATCH_QUEUE_SERIAL);
// set target queue, 将 _renderQueue 与 global queue 关联起来,将 _renderQueue接收到的block,分发到 global 中去, 真正执行的是 global queue
dispatch_set_target_queue(_renderQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));

dispatch_set_target_queue 可以减少线程的创建,使用 target_queue 关联的 thread,执行任务.
保证主队列执行,可以封装成 inline 函数.

上一篇 下一篇

猜你喜欢

热点阅读