1

当 NSStream 连接失败或出现流错误并尝试在睡眠后重新连接时,我正在尝试在下面的代码中使用睡眠。睡眠正在工作,但它使整个应用程序进入睡眠状态。

我已经将 NSStream 作为线程启动,但是当收到 NSStreamEvent 时,handleEvent 似乎作为同步方法工作。

关于在这段代码中使用睡眠的任何想法..?我只想让睡眠单独为流线程工作。

- (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 回答