NSInputStream в фоновом потоке не вызывает NSStreamEventHasBytesAvailable - PullRequest
1 голос
/ 24 декабря 2011

Я работаю над потоковой частью приложения. Мне нужно было поместить потоковый процесс в фоновый поток, который использует NSinputstream и NSOutputstream. затем я посылаю команды http по этому потоковому каналу в том же потоке. Я получаю NSStreamEventOpenCompleted и NSStreamEventHasSpaceAvailable, а также получаю http-запрос на стороне сервера, но он не поднимает СОБЫТИЯ, КОТОРЫЕ ДОСТУПНЫ. и я не могу получить ответы ... Я не знаю, в чем проблема. вот часть моих кодов:

Тема, которую я использую:

- (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 Ответ

1 голос
/ 05 января 2012

причина в том, что NSRunloop, который отвечает за обратный вызов соединения, вы должны поместить его в свой код

...