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

스트리밍과 관련이없는 코드를 게시했습니다. BTW 귀하의 threadLock은 아무런 효과가 없습니다. 왜냐하면 각 스레드에 대해 새 스레드를 생성하기 때문입니다. 그리고 더 - 그것은 새어 나오고 있습니다, 왜냐하면 당신은 그것을 풀어주지 않기 때문입니다. – Max

+0

감사합니다. 그래서 필요한 것은 무엇입니까? 나는 당신을 위해 게시합니다. 자물쇠에 대해 지금 이해하고 있습니다. –

답변

1

이유 때문에 NSRunloop이다, 즉 당신이 당신의 코드에 배치해야, 다시 접속 호에 대한 책임