2011-02-05 13 views
0

私はMGTwitterEngineを使ってツイートからツイートを取得しています。これは、非同期的なパラダイムを使用して、別のスレッドでそのツイートを取得します。フェッチされた結果をメインスレッドに返します。他のスレッドが目的のCで終了するのを待ちます

つぶやきが取り込まれた後にいくつかの処理が行われるため、UIスレッドをロックしないように別のスレッドを導入したいと思います。 UIスレッドは新しいスレッドXを開始します。スレッドXはMGTEngineでつぶやきの非同期フェッチを開始し、は終了するためにを待ちます。 MGTwitterEngineが返ってくると、スレッドXはつぶやきを処理し、準備ができていることをUIスレッドに通知します。

私の質問は次のとおりです:MGTwitterEngineが起動するまでスレッドXを待機させるにはどうすればいいですか?

答えて

0

現在、ブロックでマルチスレッドを使用しないという言い訳はほとんどありません。それらはNSOperationsより速く開発され、同期はより簡単で、ジャンプするスレッド(UIスレッドを取得するなど)は簡単で、自分の経験ではパフォーマンスが優れています。

この場合、私は非同期フェッチを起動するために新しいスレッドを生成します(おそらく非同期フェッチを生成してキャンセルをより簡単にします)。処理とUIの更新のためにフェッチが行われます。あなたがこれを行うことができます2つの方法があります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

ご回答ありがとうございます。それはokと思われますが、MGTwitterEngineは非同期的なフェッチでブロックを使用しません。私は[twitterEngine getHomeTimelineSinceID:etc ..]と呼ぶ。その結果をmuデリゲートに返します。そこに新しいスレッドが作成されます。 https://github.com/mattgemmell/MGTwitterEngine/blob/master/MGTwitterEngine.m を参照してください。最初のフェッチが開始され、ブロックはすぐに[processTweets]で開始されると思います – jwdehaan

+0

OK、私の編集を参照してください –

0

: は、ここでは良いTUTです。

  1. ブロッキングネットワーク呼び出しを使用します(可能であれば)。

  2. CFRunLoopRun()を呼び出す---スレッド内の操作を続行する別のイベントを待機します。非同期データフェッチが完了すると、スレッドxのX runloopsコンテキストでCFRunLoopStop()を呼び出します。

関連する問題