当NSStream连接失败或出现流错误并在休眠后尝试重新连接时,我尝试在以下代码中使用休眠。休眠工作,但它使整个应用程序进入休眠状态。
我已经将NSStream作为线程启动,但是当接收到NSStreamEvent时,handleEvent似乎正在作为同步方法工作。
对使用睡眠来编写这段代码有什么想法吗?我只想让睡眠只对Stream Thread起作用。
- (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;
}
}发布于 2012-08-16 19:50:24
您应该使用GCD (中央调度中心)。您的代码正在后台执行,并且您的应用程序不会冻结。
请阅读:GCD Reference
基本上,您创建一个队列并添加一个代码块,该代码块在后台执行。下面是我的代码示例
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)
});
});https://stackoverflow.com/questions/11986245
复制相似问题