2010-04-05 80 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完成。 – 2010-04-05 23:46:09

+0

经过很长时间的搜索后,我发现NSTask并不是没有响应,而是其他的东西。这允许我摆脱线程。谢谢你问我为什么需要一个,否则我不会发现问题。 – 2010-04-06 08:10:17

回答

1

您是否在该线程上运行了运行循环?如果不是,NSTask将不会注意到任务结束(或任务不会结束),并且不会发布通知。

+0

我试过[[NSRunLoop currentRunLoop] run],但似乎没有帮助。我是否以错误的方式使用它? – 2010-04-05 16:14:55

+0

你在做什么? – 2010-04-05 17:44:53

+0

第二个线程中的对象(我在detachNewThreadSelector中指定的那个:toTarget:withObject :) – 2010-04-05 18:50:07