1

我正在處理流應用程序的一部分。我需要在使用NSinputstream和NSOutputstream的後臺線程上進行流處理。 然後我通過同一個線程上的這個流式傳輸通道發送http命令。 我收到NSStreamEventOpenCompleted和NSStreamEventHasSpaceAvailable,並且還收到服務器端的http請求,但它不會引發EVENT HAS BYTES AVAILABLE。我無法收到答覆......我不知道問題是什麼。這裏是我的代碼一些部分:NSInputStream在後臺線程不會調用NSStreamEventHasBytesAvailable

主題,我使用:

- (void)backgroundThread 
{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

NSLock *threadLock = [[NSLock alloc] init]; 
while (quitProcess) 
{ 
    if (queue.count > 0) 
    { 
     [threadLock lock];// Blocks other threads 
     cmdQueue = [queue copy]; 
     [queue removeAllObjects]; 
     [threadLock unlock]; 
    } 
    else 
    { 
     sleep(1); 
    } 

    if (cmdQueue){ 
     for (NSString* cmd in cmdQueue) 
     { 

      if ([cmd isEqualToString:@"subscribe"]){ 
       [self openCmdLine]; 
      }else if ([cmd isEqualToString:@"dataConnect"]){ 
       [self dataConnect]; 
      }else if ([cmd isEqualToString:@"openCmdLine"]){ 
       [self openCmdLine]; 
      }else if ([cmd isEqualToString:@"closeCmdLine"]){ 
       [self closeCmdLine]; 
      }else if ([cmd isEqualToString:@"handshake"]){ 
       sleep(5); 
       [self cmdHandshake]; 
      }else if ([cmd isEqualToString:@"topvol"]){ 
       [self cmdTopVol]; 
      }else{ 
       //subscribe or unsubscribe 

      } 

     } 
     cmdQueue = nil; 
    } 


    } 
    [pool drain]; 
} 
+1

您發佈的代碼與您的流式傳輸無關。順便說一下,你的threadLock完全沒有任何作用,因爲你正在爲每個線程創建一個新線程。甚至更多 - 它泄漏,因爲你不釋放它。 – Max 2011-12-24 11:29:52

+0

謝謝你,所以你需要我發佈給你,關於我現在明白的鎖。 – 2011-12-30 19:10:22

回答

1

的原因是因爲NSRunloop的,是負責連接電話回來,你應該把它放在你的代碼

相關問題