2009-10-28 6 views
5

Ich möchte einen Thread nach Abschluss eines Threads planen.Planen eines Threads nach einem Thread in iPhone-Anwendung

Ist es möglich? Wie?

Zum Beispiel (meine Notwendigkeit angeben)

- (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

Dare ich frage warum alle diese müssen separate Threads sein, wenn sie eine Reihe von streng seriellen Aufgaben ausführen? –

+0

Haben Sie füllen Beispiel für diesen Fall, ich brauche es jetzt – wod

Antwort

10

Wenn Sie NSOperations verwenden können Sie die addDependency: Methode verwenden, um eine Operation der Abhängigkeiten zu spezifizieren.

NSInvocationOperation wird Ihnen wahrscheinlich nützlich sein, wenn Sie diese Route gehen.

Bearbeiten: Ich lese gerade das Thema und Sie sind auf dem iPhone, so dass Sie keine Blöcke haben, aber als Referenz, wenn Sie Blöcke zur Verfügung haben, NSBlockOperation ist noch besser.

Beachten Sie, dass Sie bei Verwendung dieser Methoden für asynchrone Vorgänge (und unter der Annahme, dass der Code in ihnen Autorelease verwendet) dafür verantwortlich sind, NSAutoreleasePool zu instanziieren, wenn die Methode ausgeführt wird und beim Beenden freigegeben wird.

+1

Blöcke und damit NSBlockOperation sind nicht verfügbar auf dem iPhone (noch nicht). (Ihre Links verweisen auch auf die Mac OS X-Dokumentation; da dies eine iPhone-Frage war, wäre die iPhone-Dokumentation besser geeignet.) – oefe

+0

Bearbeitet, um Links zu aktualisieren – nall

+0

** Update: ** Ab iOS 4.0 haben wir jetzt Blöcke . – memmons

2

(1) Sie können die Threads isFinished Eigenschaft abfragen.

(2) Sie können Ihr Dispatching/Controlling-Objekt registrieren, um die Threads NSThreadWillExitNotification Benachrichtigung zu erhalten. Für eine genauere Kontrolle können Sie NSThread von der Unterklasse ableiten und eine Benachrichtigung als letzte Aktion senden, bevor der Thread stoppt. Dann können Sie in Ihrem Benachrichtigungshandler für Controlling-Objekte isFinished abfragen, um sicherzustellen, dass es erledigt ist, bevor Sie den nächsten Thread starten.

Siehe Thread Programming Guide und NSThread Class Guide.

Verwandte Themen