2011-02-05 65 views
0

我正在使用MGTwitterEngine從Twitter獲取推文。這使用異步範式來獲取另一個線程中的tweets。它將獲取的結果返回給主線程。等待其他線程完成目標c

因爲我在提取tweets後有一些處理待辦事項,所以我想介紹另一個線程來防止鎖定UI線程。 我喜歡這樣做: UI線程啓動一個新線程X.線程X啓動與MGTEngine的異步獲取推文,並且等待完成。當MGTwitterEngine返回時,線程X處理推文,並通知UI線程我們已準備好。

我的問題是:如何設置線程X等待MGTwitterEngine reade?

回答

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); 
+0

感謝您的回覆。它看起來沒問題,但是MGTwitterEngine並不使用與異步讀取相關的塊。我致電[twitterEngine getHomeTimelineSinceID:etc ..];並在mu委託中返回結果。它在那裏創建一個新線程。請參閱https://github.com/mattgemmell/MGTwitterEngine/blob/master/MGTwitterEngine.m 所以,我認爲我的初始抓取將被解僱,並且該塊將立即與[processTweets] – jwdehaan 2011-02-05 14:00:05

0

有2種方法可以做到這一點。

  1. 使用阻止網絡調用---如果posible。

  2. 調用CFRunLoopRun()---等待另一個事件繼續執行線程中的操作。一旦異步數據讀取完成,就調用線程x中的X runloops上下文中的CFRunLoopStop()。