0

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

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

我的问题是:如何设置线程 X 等到 MGTwitterEngine 被读取?

4

2 回答 2

0

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

  1. 使用阻塞网络调用 --- 如果可能的话。

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

于 2011-02-06T12:24:04.077 回答
0

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

在这种情况下,我会创建一个块,生成一个新线程来启动您的异步获取(可能为每个线程生成一个异步获取 - 使取消更容易)将 2 个同步块放入队列中,这些块将在获取完成后触发处理和 UI 更新。这是一个很好的 tut: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);
于 2011-02-05T12:30:47.263 回答