etwas Arbeit im Hintergrund und das Ergebnis zurückgeben

8

Ich versuche, die ID von einem Tag zu bekommen, indem ich eine Bibliothek benutze.

Ich habe folgendes gefunden. Die Schleife, die nach einem Tag sucht, wird im Hintergrund ausgeführt und ich bekomme ein korrektes Ergebnis in tagAsString.

%Vor%

Ich möchte diesen Wert zurückgeben können, damit ich anrufen kann:

%Vor%

ist das möglich? Danke für deine Hilfe, Michael

    
Themikebe 17.05.2011, 14:02
quelle

1 Antwort

12

Es ist möglich, aber das Problem mit der Rückgabe einer Zeichenkette aus dieser Funktion ist, dass es Ihren aufrufenden Thread halten muss, während Sie die Arbeit im Hintergrund ausführen - und somit den Vorteil des Hintergrundthreads verlieren. (dispatch_sync ist das, was Sie verwenden würden - aber ich würde es nicht empfehlen).

Bei der Verwendung von Blöcken ist es am besten, das Programm so zu strukturieren, dass es besser in das asynchrone Paradigma passt. Wenn die Arbeit abgeschlossen ist, sollte sie mitteilen, was auf das Ergebnis wartet, indem sie eine Nachricht mit dem Ergebnis sendet. In Ihrem Beispiel würden Sie dies in den Codeblock einfügen, den Sie in der Hauptwarteschlange versenden.

%Vor%

Dann würde Ihre readTag-Funktion wie folgt geändert:

%Vor%

Die Hauptidee ist, dass Sie Ihre Verarbeitung in zwei Stufen aufteilen müssen

  1. Bitte um etwas Arbeit (fetchTag in meinem Beispiel)
  2. verarbeitet das Ergebnis, wenn es fertig ist (tagFetched: in meinem Beispiel)
jjwchoy 17.05.2011, 14:42
quelle