Запуск Cocoa GUI в неосновном thread

У меня возникла проблема, связанная с графическим интерфейсом/поточностью при разработке пользовательского интерфейса какао. . Приложение разработано следующим образом:

Основной поток (#1): анализирует аргументы, загружает плагины и т. д.

Поток графического интерфейса (#?): запускает графический интерфейс, обрабатывает события и т. д. Это поток графического интерфейса.

Каркас Cocoa не является потокобезопасным, но применяет одно правило: графический интерфейс должен работать в основном потоке. Для проверки этого используется утверждение. Чтобы попытаться обойти это, я сам реализовал метод запуска (код ниже), следуя этому - http://cocoawithlove.com/2009/01/demystifying-nsapplication-by.html- руководство. Но я что-то упускаю. Окно открывается, но остается пустым (полностью белым). Хотя, если я делаю вызов в основном потоке, он работает отлично.

В общем, мне нужно выяснить, чего не хватает.

- (void)run
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [self finishLaunching];

    shouldKeepRunning = YES;
    do
    {
        [pool release];
        pool = [[NSAutoreleasePool alloc] init];

        NSEvent *event =
            [self
                nextEventMatchingMask:NSAnyEventMask
                untilDate:[NSDate distantFuture]
                inMode:NSDefaultRunLoopMode
                dequeue:YES];

        [self sendEvent:event];
        [self updateWindows];
    } while (shouldKeepRunning);

    [pool release];
}

- (void)terminate:(id)sender
{
    shouldKeepRunning = NO;
}

8
задан OCarlos 18 March 2012 в 20:23
поделиться