后台线程中的 NSInputStream 不调用 NSStreamEventHasBytesAvailable



我正在处理应用程序的流媒体部分。我需要把流进程放在后台线程,它使用NSinputstream和NSOutputstream。然后我在同一线程上通过这个流媒体通道发送http命令。我收到NSStreamEventOpenCompleted和NSStreamEventHasSpaceAvailable,我也收到服务器端的http请求,但它不会引发EVENT HAS BYTES AVAILABLE。我无法收到回复…我不知道有什么问题。以下是我的部分代码:

我正在使用的线程:

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

原因是NSRunloop,它负责连接回调,你应该把它放在你的代码

最新更新