2010-04-05 82 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