2009-10-28 17 views
5

Chcę zaplanować wątek po zakończeniu wątku.planowanie wątku po wątku w aplikacji iPhone

Czy to możliwe? W jaki sposób?

Na przykład (określenie moje potrzeby)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    // 1. response - schedule myThread 
    // 2. response - schedule a new thread which will be executed after myThread 
    // 3. response - schedule a new thread which will be executed after second thread 
    // ..... 
} 
+2

Odważę się zapytać, dlaczego te wszystkie muszą być oddzielnymi wątkami, jeśli wykonują zestaw ściśle szeregowych zadań? –

+0

Czy masz przykład wypełnienia tego przypadku, potrzebuję go teraz – wod

Odpowiedz

10

Jeśli używasz NSOperations można użyć metody addDependency: określenie współzależności z operacji.

NSInvocationOperation prawdopodobnie przyda Ci się, gdy pojedziesz tą trasą.

Edytuj: Ponownie przeczytam temat i jesteś na iPhonie, więc nie masz bloków, ale dla odniesienia, jeśli masz dostępne bloki, NSBlockOperation jest jeszcze lepszy.

Należy pamiętać, że podczas korzystania z tych metod do wykonywania operacji asynchronicznych (i przy założeniu, że kod w ich używa autorelease) będziesz odpowiedzialny za instancji jest NSAutoreleasePool kiedy zaczyna metoda działa i zwalniania/odprowadzanie go na wyjściu.

+1

Bloki, a zatem NSBlockOperation nie są dostępne na iPhonie (jeszcze). (Również twoje linki wskazują na dokumentację Mac OS X, ponieważ było to pytanie dotyczące iPhone'a, bardziej odpowiednia byłaby dokumentacja dla iPhone'a.) – oefe

+0

Edytowane w celu aktualizacji linków – nall

+0

** Aktualizacja: ** Od wersji iOS 4.0 mamy teraz klocki . – memmons

2

(1) Można sondować właściwości wątków isFinished.

(2) Możesz zarejestrować swój obiekt dyspozytorski/kontrolny, aby otrzymać powiadomienie o wątkach NSThreadWillExitNotification. Aby uzyskać bardziej precyzyjną kontrolę, możesz podklasę NSThread i wysłać powiadomienie jako ostatnią czynność, zanim wątek się zatrzyma. Następnie w module obsługi powiadomień obiektów kontrolnych możesz odpytać isFinished, aby upewnić się, że jest zrobione przed uruchomieniem następnego wątku.

Zobacz Thread Programming Guide i NSThread Class Guide.

Powiązane problemy