2个后台进程的队列

时间:2014-06-09 08:26:57

标签: ios multithreading queue grand-central-dispatch

我需要创建两个同步工作的后台进程队列。

我尝试使用此代码但没有得到它。我的错误在哪里?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  //block1
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    //block2
  });
});

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你需要创建一个串行队列,如果你想让你的块同步运行:

dispatch_queue_t queue = dispatch_queue_create("queue-name", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
  // first block
});
dispatch_async(queue, ^{
  // second block
});

这两个块都将在一些未命名的后台线程上运行,但它们将同步运行。第一个块将在第二个块开始之前完成执行。

您可能不想使用后台优先级。此队列将由默认优先级全局队列支持,这几乎可以肯定是您想要的。

答案 1 :(得分:-1)

您可以在单线程中编写代码,同步将同步运行。

dispatch_queue_t queue = dispatch_queue_create("queue-name", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
    // first block
    for (int i = 0; i < 100; i++)
    {
        NSLog(@"value = %d",i);
        sleep(1);
    }
       NSLog(@"Hi...");
});