1

NSStream 接続が失敗した場合、またはストリーム エラーが発生してスリープ後に再接続しようとした場合に、以下のコードでスリープを使用しようとしています。スリープは機能していますが、アプリケーション全体がスリープ状態になります。

NSStreamをThreadとして起動したのですが、NSStreamEventを受信するとhandleEventが同期メソッドとして動作しているようです。

このコードに Sleep を使用するアイデアはありますか? ストリームスレッドだけでスリープが機能するようにしたいだけです。

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event 
{
        case NSStreamEventErrorOccurred:
        {
            NSError *streamErr = [stream streamError];
            NSString *strErr = [streamErr localizedFailureReason];
            [self CloseStream];
            NSLog(@"Stream Error ::: %@",strErr);
            //[NSThread sleepForTimeInterval : 15];
            sleep(15);
            [self Initialize];
            [self OpenStream];
            break;
        }

        case NSStreamEventEndEncountered:
        {
            NSLog(@"Connection Closed by the Server");
            [self CloseStream];
            usleep(15000);
            [self Initialize];
            [self OpenStream];
            break;
        }
}
4

1 に答える 1

1

GCD(Grand Central Dispatch)を使用する必要があります。コードはバックグラウンドで実行されており、アプリケーションはフリーズしません。

これを読んでください:GCDリファレンス

基本的に、キューを作成し、バックグラウンドで実行されているコードのブロックを追加します。これが私のコード例です

dispatch_queue_t backgroundQueue = dispatch_queue_create("some_identifier", NULL);
dispatch_async(backgroundQueue, ^(void) {   
        //do your background stuff

        dispatch_sync(dispatch_get_main_queue(), ^{
            //update the gui (if needed)
        });

    });
于 2012-08-16T11:50:24.010 に答える