So stornieren Sie eine von vielen threads in swift
Gut .. ich bin in der situation wie dieser: ich habe eine Funktion, die beginnt 3 asynchrone threads. Jeder thread etwas tun, welche einige Zeit in Anspruch nehmen. Wenn einige thread zuerst fertig zu werden, ich brauche es halt die anderen 2, aber ich weiß nicht wie es geht (noch).
Mein code:
class SomeController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view.
threads();
}
func threads(){
let operationQueue = NSOperationQueue();
operationQueue.addOperationWithBlock(
{
let thread = NSThread.currentThread();
let threadNumber = thread.valueForKeyPath("private.seqNum").integerValue;
NSThread.sleepForTimeInterval(30);
println("Task #1 completed on thread #\(threadNumber)");
})
operationQueue.addOperationWithBlock(
{
let thread = NSThread.currentThread();
let threadNumber = thread.valueForKeyPath("private.seqNum").integerValue;
NSThread.sleepForTimeInterval(20);
println("Task #2 completed on thread #\(threadNumber)");
})
operationQueue.addOperationWithBlock(
{
let thread = NSThread.currentThread();
let threadNumber = thread.valueForKeyPath("private.seqNum").integerValue;
NSThread.sleepForTimeInterval(5);
println("Task #3 completed on thread #\(threadNumber)");
})
}}
Jede Rasche Hilfe oder Beratung wird apperciated 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht wirklich eine Frage zu dem Abbrechen eines
NSThread
. Vielmehr ist es eine Frage, wie das Abbrechen einesNSOperation
. In diesem Fall ist es relativ leicht zu brechen Sie alle Operationen, da Sie die Schaffung eines einzigenNSOperationQueue
für den alleinigen Zweck der Ausführung Ihrer drei Blöcke. Senden Sie einfach die operationQueue eine cancelAllOperations Nachricht:Der unglückliche Teil ist, dass die operation Abbrechen ist wirklich kooperativ, so dass innerhalb der operation, die Sie haben, um in regelmäßigen Abständen überprüfen
isCancelled
und kündigen an:NSOperation
anstattaddOperationWithBlock
, aber die jist der Antwort bleibt die gleiche 🙂addOperationWithBlock
nicht wieder dieNSOperation
, so können Sie nicht stornieren und Sie einzeln. Um den Vorgang abzubrechen, müssen Sie die sub-KlasseNSOperation
und Rollen Sie Ihre eigenen. Dann kannst du verwendenoperation.cancel()
stornieren Sie einen einzelnen Vorgang.Wenn Sie eine operation mit addOperationWithBlock, können Sie ihn Abbrechen, was Sie wollen, es hat keine Wirkung. Wenn Sie wollen Abbrechen eine operation, ich empfehle nicht mit einem block, aber Unterklassen von NSOperation. Die Aufgabe, die immer ausgeführt werden müssen, prüfen Sie manuell, wenn es storniert und beenden Sie die Aufgabe; Sie kann nicht mit addOperationWithBlock.