10

iOSで何らかのイベントが発生するまでNSThread内で待機する方法は?

例: NSThread を作成し、スレッド ループを開始しました。スレッド ループ内には、メッセージ キューにメッセージがあるかどうかを確認する条件があります。メッセージがある場合は、対応するメソッドを呼び出して何らかの操作を行います。そうでない場合は、メッセージ キューに新しいメッセージが入力されるまで待機する必要があります。

イベントが発生するまで待機できる API またはメソッドはありますか?

For Example 

NSThread *thread = [NSThread alloc]....@selector(threadLoop)

- (void)threadLoop
{
   // Expecting some API or method that wait until some messages pushed into the message queue
   if (...) {

   }
}

どんな助けでも感謝されるべきです。

4

3 に答える 3

2

セマフォを使用できます。以下の例を参照してください。ロジックは非常に単純です。私の例では、ブロックはバックグラウンドで実行され、メイン スレッドはセマフォのディスパッチ シグナルがオンになるのを待ちます。主な違いは、私の場合、待機中のスレッドがメイン スレッドであることですが、セマフォ ロジックはここにあります。これを自分のケースに簡単に適応させることができると思います。

//create the semaphore
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

[objectManager.HTTPClient deletePath:[address addressURL] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

      //some code here

        dispatch_semaphore_signal(semaphore);

    }failure:^(AFHTTPRequestOperation *operation, NSError *error) {

       //some other code here

        dispatch_semaphore_signal(semaphore);
    }];

//holds the thread until the dispatch_semaphore_signal(semaphore); is send
while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
{
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
于 2013-07-31T13:33:03.620 に答える