2010-04-05 2 views
2

멀티 스레드 응용 프로그램에서 NSTaskDidTerminateNotification 알림을 받으려고하는데 작동하지 않습니다. 그것은 하나의 스레드 응용 프로그램에서 테스트했을 때 작동하는 것 같습니다. init에서 나는 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(taskDidEnd:) name: NSTaskDidTerminateNotification object: myTask];을 가지고 있으며 다른 객체 (예 : myTask)가 거기에서 시작 되었기 때문에 호출된다는 것은 확실합니다. 그리고 taskDidEnd: 방법은NSNotification 및 Multithreading

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

으로 정의되며 관찰자는 제거됩니다.

이 모든 것은 별도의 스레드에서 시작된 개체에서 발생하며 같은 개체 내에 알림을 받고 싶습니다.

+0

덧붙여 말하자면, 스레드에서이 작업을 수행하는 이유가 무엇입니까? 작업 (프로세스)은 이미 다른 프로세서에서 예약되는 경향이 있으며 실행 루프는 자연스럽게 NSTasks 완료와 같이 자주 발생하지 않는 이벤트를 처리합니다. –

+0

오랜 시간을 검색 한 후 NSTask가 응답하지 않고 다른 것임을 알았습니다. 이렇게하면 스레드를 제거 할 수 있습니다. 왜 내가 필요한지 물어 줘서 고마워. 그렇지 않으면 문제를 발견하지 못했을거야. –

답변

1

실행 루프를 해당 스레드에서 실행 했습니까? 그렇지 않은 경우 NSTask는 작업이 종료되었음을 알지 못하며 (또는 작업이 아직 끝나지 않았 음) 알림을 게시하지 않습니다.

+0

init 내에서 [[NSRunLoop currentRunLoop] run]을 시도했지만 도움이되지 않습니다. 내가 잘못 사용하고 있습니까? –

+0

당신은 무엇을하고 있습니까? –

+0

두 번째 스레드 (detachNewThreadSelector : toTarget : withObject에 지정된 스레드)의 개체 : –