Muszę wstrzymać bieg NSOperation, który został wstawiony do NSOperationQueue. Obecnie anuluję wszystkie operacje i zrestartuję je. Ale doprowadziłoby to do pewnego rodzaju dublowania pod względem wykonanego procesu. Próbowałem z flagą setSuspended z NSOperationQueue. Ale to nie wstrzymuje operacji. Czy jest jakieś wyjście?Jak mogę wstrzymać NSOperation w NSOperationQueue?
Odpowiedz
zobaczyć: Link
I tu od apple docs:
zawieszania i wznawiania Kolejki Jeśli chcesz wydać tymczasowe wstrzymanie realizacji operacji, można zawiesić odpowiednią kolejkę operacji przy użyciu metody setSuspended:.
Wstrzymywanie kolejki nie powoduje już wstrzymania wykonywania operacji w trakcie wykonywania ich zadań. Po prostu uniemożliwia zaplanowanie wykonania nowych operacji. Możesz zawiesić kolejkę w odpowiedzi na żądanie użytkownika, aby wstrzymać wszelkie trwające prace, ponieważ oczekuje się, że użytkownik może w końcu chcieć wznowić tę pracę.
Ja nie próbowałem, ale pewnie bym zacząć tutaj:
- dodać
isPaused
flagę doNSOperation
podklasy - wdrożyć metody Kopiuj/przenieś do danych danej operacji
- jeśli wstrzymano, (obejrzyj tę zmianę w
-main
) - utwórz nową operację przenoszenia stanu z wstrzymanej operacji na nową operację
- ustawić priorytet uporządkować kolejność operacji w kolejce, jeśli chcesz
- dodać klona do kolejki
- zwrot z
-main
jeśli w-main
pamiętać, że będzie to po prostu zawiesić go. jeśli naprawdę chcesz wstrzymać i wyraźnie wznowić, ręcznie wznowisz "nową operację", gdy chcesz wznowić.
teraz, jeśli obserwujesz lub masz specjalne uzupełnienia, będziesz miał kilka innych problemów. w przypadku prostych spraw wydaje się, że takie podejście wydaje się działać dobrze.
- 1. Jak zablokować NSOperation do zakończenia zadania NSOperationQueue?
- 2. Jak mogę anulować zależności NSOperation?
- 3. dispatch_after equivalent w NSOperationQueue
- 4. OCMock an NSOperation
- 5. NSOperationQueue nie działa w IOS5
- 6. Ogólna podklasa NSOperation traci funkcjonalność NSOperation
- 7. Asynchroniczny NSURLConnection z NSOperation
- 8. [NSOperation cancelAllOperations]; nie przerywa operacji.
- 9. NSOperationQueue i współbieżne vs jednokierunkowe
- 10. iOS - Jak sprawdzić, kiedy NSOperationQueue zakończy przetwarzanie kilku operacji?
- 11. Poważne spowolnienie za pomocą NSInvocationOperation (NSOperation) z NSOperationQueue na iOS 4 (iPhone)
- 12. iOS - asynchroniczny NSURLConnection wewnątrz NSOperation
- 13. Wywołanie - (void) cancelAllOperations na NSoperationQueue nie ustawia właściwości isCancelled of NSOperation, która jest obecna wewnątrz Queue
- 14. NSThread vs. NSOperationQueue vs. ??? na iPhonie
- 15. Jak mogę wstrzymać okno konsoli w plikach .pl i .bat?
- 16. Metody asynchroniczne w NSOperation
- 17. JavaFX2: Czy mogę wstrzymać tło Zadanie/Usługa?
- 18. Czy istnieje sposób dodawania bloków do NSOperationQueue, tak jak to
- 19. Jak ustawić numer seryjny NSOperationQueue?
- 20. Jak wykonać asocjalny NSURLConnection wewnątrz NSOperation?
- 21. Jak mogę wstrzymać komunikaty o błędach vim przy uruchomieniu?
- 22. Jak wstrzymać/wznowić klonowanie repozytorium w merkurialnym?
- 23. NSOperation czekać aż asynchronicznego bloku wykonuje
- 24. Jak mogę odtwarzać/wstrzymać więcej niż jedno wideo przez mouseover
- 25. Jak wstrzymać i wznowić UIView.animateWithDuration
- 26. Kolejka NSOperation zachowuje się niepoprawnie
- 27. Jak wstrzymać/wznowić pobieranie w iPhone (iOS)?
- 28. RabbitMQ wstrzymać zużycie kolejki
- 29. Wartość domyślna maxConcurrentOperationCount dla NSOperationQueue
- 30. Jak wstrzymać Eclipse z dowolnego wyjątku?
Dzięki! Próbowałem zaimplementować jako z twojego linku. Dodałem nową zmienną o nazwie 'isPaused' wewnątrz NSOperation i kiedy potrzebuję wstrzymać operację, ustawię ją na YES. Wewnątrz NSOperation będę regularnie sprawdzać wartość "isPaused". Ilekroć znajdę to na "TAK", wyjdę z pętli. Ale mam tutaj poważny problem. Próbuję ustawić wartość "isPaused" z głównego wątku. Może to prowadzić do pewnych warunków wyścigowych. Czy istnieje sposób na pozbycie się warunków wyścigu? Czy istnieje sposób wywoływania metod (zatrzymywania i wznawiania) w tym samym wątku (zamiast w wątku głównym)? – Advaith
@Advaith: Jeśli oba wątki zablokują muteks przed odczytaniem lub zapisaniem do "isPaused", nie będziesz musiał martwić się o wyścigi. –