Вопрос о блоках и центральной диспетчерской

У меня есть вопрос, на который я не могу найти ответ, потому что я хочу знать, правильный ли мой текущий код или нет. Код ниже.

Вопрос о цикле while. Это правильно?

PS: Platinum uPnp нуждается в цикле while после Start(), иначе процесс, очевидно, остановится.

- (void) start {

 scan_queue = dispatch_queue_create("upnpscan.devices", NULL);

    dispatch_async(scan_queue, ^{

        PLT_CtrlPointReference ctrlPoint(new PLT_CtrlPoint());        
        BritneyMediaController controller(ctrlPoint, self);

        upnp.AddCtrlPoint(ctrlPoint);
        upnp.Start();

        [self setRunning:YES];
        while([self running]) { 

        }
        NSLog(@"Stopped running");
    });
    NSLog(@"Voor sleep");
    sleep(10);
    NSLog(@"Ik ben wakker");
    [self stop];
}

- (void) stop {

    [self setRunning:NO]; 
    return;

}

person Johnny Mast    schedule 08.03.2011    source источник
comment
Обратите внимание, что смешивание C++ и блоков довольно хрупкое (т.е. в некоторых случаях полностью нарушено) за пределами LLVM 2.0.   -  person bbum    schedule 09.03.2011


Ответы (1)


Это не выглядит правильно. Если вам нужен цикл while, это означает, что Start() неблокирует, и в этом случае он не должен быть в фоновом потоке. Вы должны запустить цикл выполнения в основном потоке и начать оттуда, похоже.

person Catfish_Man    schedule 08.03.2011
comment
Дело в том, что он может быть неблокирующим, и это указывает на то, что это так, но если я не выполняю цикл while после start(), встроенный прослушиватель сокетов перестает слушать. - person Johnny Mast; 08.03.2011
comment
я починил это . Это было глупо, не смейтесь. Я инициализировал состояние прослушивания с помощью start(), а затем оставил функцию, чтобы она забыла об экземпляре. - person Johnny Mast; 08.03.2011