首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后台线程中的NSInputStream不调用NSStreamEventHasBytesAvailable

后台线程中的NSInputStream不调用NSStreamEventHasBytesAvailable
EN

Stack Overflow用户
提问于 2011-12-24 17:55:55
回答 1查看 768关注 0票数 1

我正在处理应用程序的流媒体部分。我需要把流式处理放在后台线程上,它使用NSinputstream和NSOutputstream。然后我在同一线程上通过这个流传输通道发送http命令。我收到了NSStreamEventOpenCompleted和NSStreamEventHasSpaceAvailable,也收到了服务器端的http请求,但它没有引发事件是否有可用字节。我也收不到回复...我不知道问题出在哪里。下面是我的部分代码:

我正在使用的线程:

代码语言:javascript
复制
- (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];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-05 15:19:08

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8623845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档