2014-01-29 29 views
1

我的应用程序必须在云数据库和核心数据之间进行大量同步,并且这发生在各种方法中。我这样做是使用简单的后台线程:如何创建和管理串行后台线程

dispatch_queue_t backgroundThread = dispatch_queue_create("background thread", NULL); 

dispatch_async(backgroundThread, ^{ ... 

但是,如果我的应用程序做的东西太迅速,可以同时进行不同的同步任务,这可能会导致意外的结果。

因此,我想在一个线程上串行执行所有同步任务。无论何时我需要执行同步任务,我都想将其分派到专用线程,而不是在该线程完成所有以前提交的任务之前执行。我应该如何管理?具体而言...

  1. 我应该如何实例化我的后台串行线程?
  2. 我应该采取措施在应用程序的整个生命周期中保留它,或者 - 不确定这是否是一个问题 - 让它在不使用时释放,然后重新创建它?
  3. 我该如何引用它/从各种方法/对象派遣它?

我一直没有找到答案直接解决这种情况。这一个(Using a single shared background thread for iOS data processing?)接近,但回避。

谢谢你的时间。

回答

3

访问通过一个静态函数像这样的队列:

static dispatch_queue_t my_serial_queue() { 

    static dispatch_queue_t s_serial_queue; 
    static dispatch_once_t s_done; 
    dispatch_once(&s_done, ^{s_serial_queue = dispatch_queue_create("com.app.my_queue_name", DISPATCH_QUEUE_SERIAL);}); 
    return s_serial_queue; 
} 

然后使用它像这样...

dispatch_sync(my_serial_queue(), ^{ 
    //do something here 
}); 
+0

其实,我得到一个错误说一个分号后预期( )在第一行。 – mkc842

+0

你的意思是在my_serial_queue()的声明中吗?你能给出完整的错误信息吗? – combinatorial

+0

啊一个“静态函数”不能在方法中声明。我熟悉块而不是函数。无论如何,明白了,谢谢。 – mkc842

相关问题