2010-04-05 1 views
2

Я пытаюсь получить уведомление NSTaskDidTerminateNotification в моем многопоточном приложении, но я не могу заставить его работать. Кажется, он работает, когда я тестировал его в однопоточном приложении. В init У меня есть [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(taskDidEnd:) name: NSTaskDidTerminateNotification object: myTask];, и я уверен, что он вызван, потому что там инициируются другие объекты (такие как myTask). А метод taskDidEnd: определяется какNSNotification и многопоточность

- (void)taskDidEnd: (NSNotification *)aNotification 
{ 
    NSLog(@"Task succeeded."); 
} 

И dealloc наблюдатель получает удалены.

Все это происходит в объекте, который инициируется внутри отдельного потока, и я хотел бы получить это уведомление внутри одного и того же объекта.

+0

Кстати, есть ли причина, по которой вы делаете это в потоке? Задачи (процессы) уже имеют тенденцию планироваться на других процессорах, а циклы запуска естественно обрабатывают нечастые дискретные события, такие как обработка NSTasks. –

+0

После долгого поиска я обнаружил, что NSTask не реагирует, а что-то еще. Это позволяет мне избавиться от потока. Спасибо, что спросили, зачем я нужен, иначе я бы не нашел проблему. –

ответ

1

Вы запустили цикл запуска в этом потоке? Если нет, NSTask не заметит, что задача закончилась (или задача еще не закончилась) и не будет отправлять уведомление.

+0

Я попытался запустить [[NSRunLoop currentRunLoop]] изнутри init, но это, похоже, не помогает. Я использую это неправильно? –

+0

Что вы начинаете? –

+0

Объект во втором потоке (тот, который я указал в detachNewThreadSelector: toTarget: withObject :) –