2012-08-16 116 views
1

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

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

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

- (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; 
     } 
} 

回答

1

您应该使用GCD(Grand Central Dispatch)。您的代码正在后台执行,您的应用程序不会冻结。

阅读本: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) 
     }); 

    }); 
+1

不要忘记dispatch_release :) – jjxtra 2013-01-26 06:06:05