我正在使用MGTwitterEngine从twitter获取推文。这使用异步范例来获取另一个线程中的推文。它将获取的结果返回给主线程。
因为在提取推文之后我有一些处理todo,我想引入另一个线程来防止锁定UI线程。 我喜欢这样做: UI线程启动一个新线程X.线程X开始使用MGTEngine异步获取推文,等待完成。当MGTwitterEngine返回时,线程X处理推文,并通知UI线程我们已准备好。
我的问题是:如何设置线程X等待MGTwitterEngine重新启动?
答案 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)
有两种方法可以做到这一点。
使用阻止netwrok调用---如果可行。
调用CFRunLoopRun()---等待另一个事件继续执行线程中的操作。完成异步数据提取后,在线程x中的X runloops上下文中调用CFRunLoopStop()。