等待其他线程在目标c中完成

时间:2011-02-05 11:33:37

标签: objective-c multithreading mgtwitterengine

我正在使用MGTwitterEngine从twitter获取推文。这使用异步范例来获取另一个线程中的推文。它将获取的结果返回给主线程。

因为在提取推文之后我有一些处理todo,我想引入另一个线程来防止锁定UI线程。 我喜欢这样做: UI线程启动一个新线程X.线程X开始使用MGTEngine异步获取推文,等待完成。当MGTwitterEngine返回时,线程X处理推文,并通知UI线程我们已准备好。

我的问题是:如何设置线程X等待MGTwitterEngine重新启动?

2 个答案:

答案 0 :(得分:0)

现在没有理由不使用块多线程。它们比NSOperations更快开发,同步更简单,跳线程(例如抓取UI线程)更简单,根据我自己的经验,性能更好。

在这种情况下,我会创建一个块,生成一个新线程来启动异步提取(可能会为每个提取异步提取 - 使更容易取消)将2个同步块放入队列中,这些块将在提取后触发完成处理和UI更新。 这是一个很好的啧啧:http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

//GOES IN Tweet delegate

myQueue = dispatch_queue_create("myQueue", 0);//local instance var dispatch_queue_t

dispatch_async(myQueue, ^{

                      [self processTweets];//executed after fetch is done.
                      dispatch_sync(dispatch_get_main_queue(), ^{
                          [self uiBasedFunction];//executed on main thread
                                                            });
                         });
dispatch_release(myQueue);

答案 1 :(得分:0)

有两种方法可以做到这一点。

  1. 使用阻止netwrok调用---如果可行。

  2. 调用CFRunLoopRun()---等待另一个事件继续执行线程中的操作。完成异步数据提取后,在线程x中的X runloops上下文中调用CFRunLoopStop()。