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

+0

ありがとう、何が必要なのか私はあなたのために、ロックについて私はそれを今理解する。 –

答えて

1

理由が原因NSRunloopであるが、それはあなたがあなたのコードでそれを配置する必要があり、背面の接続コールを担当して

関連する問題