2个街区的GCD

时间:2014-05-04 11:57:45

标签: ios multithreading queue dispatch

我想在第一个块中创建队列将在后台运行,然后它完成我想在主线程中运行第二个块

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
 // block 1

    dispatch_async(dispatch_get_main_queue(), ^{

  // block 2
      });
    });

如何在这里添加队列?

2 个答案:

答案 0 :(得分:1)

你拥有的,即嵌套的GCD调用,应该可以正常工作。它只应在代码上面对主线程的GCD调用完成时调用主线程。

答案 1 :(得分:0)

您可以像这样建立一个队列:

dispatch_queue_t queue = dispatch_queue_create("com.company.queue", 0);
dispatch_group_t group = dispatch_group_create();


dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

    // block 1

    dispatch_group_async(group, queue, ^{
        printf("first block\n");
    });

    // block 2

    dispatch_group_async(group, queue, ^{
        printf("second block\n");
    });

});

dispatch_group_notify(group, queue, ^{
    printf("all tasks are finished!\n");
});


dispatch_async(dispatch_get_main_queue(), ^{

    // your code on main thread to update UI
    printf("main thread\n");

});