Necesito detener una NSOperation en ejecución que se insertó en un NSOperationQueue. Actualmente cancelo todas las operaciones y las reinicio. Pero esto llevaría a algún tipo de duplicación en términos del proceso realizado. Intenté con el indicador setSuspended de NSOperationQueue. Pero no suspende la operación. ¿Hay alguna manera de salir?¿Cómo puedo pausar una NSOperation en un NSOperationQueue?
Respuesta
ver esto: Link
Y aquí desde el apple docs:
Suspendiendo y colas Reanudación Si desea emitir un cese temporal de la ejecución de las operaciones, se puede suspender la cola de operaciones correspondiente usando el método setSuspended:
Suspender una cola no provoca que las operaciones que ya se están ejecutando se detengan en el medio de sus tareas. Simplemente evita que las nuevas operaciones se programen para su ejecución. Puede suspender una cola en respuesta a una solicitud del usuario para pausar cualquier trabajo en curso, porque la expectativa es que el usuario eventualmente quiera reanudar ese trabajo.
no he intentado esto, pero probablemente comience aquí:
- añadir una bandera
isPaused
a suNSOperation
subclase - poner en práctica un método de copiar/mover los datos de la operación
- Si pausa, (ver para este cambio en
-main
) - crear una nueva operación de mover el estado de la operación se detuvo a nueva operación
- ajustar la prioridad para reordenar orden de operación en la cola, si se quiere
- añadir el clon a la cola
- regreso de
-main
si en-main
en cuenta que esto sólo suspenderlo. si realmente desea pausar y reanudar de forma explícita, 'nueva operación' manualmente cuando quiera reanudar.
ahora, si usted está observando o tiene terminaciones especiales, entonces tendrá algunos otros problemas. para casos simples, parece que este enfoque parece funcionar bien.
- 1. NSOperation y NSOperationQueue callback
- 2. iOS - ¿Cómo verificar si una NSOperation está en un NSOperationQueue?
- 3. ¿Cómo puedo pausar en zsh?
- 4. ¿Cómo obtener la NSOperation actualmente en ejecución?
- 5. OCMock an NSOperation
- 6. NSOperationQueue no funciona en IOS5
- 7. Desaceleración importante utilizando NSInvocationOperation (NSOperation) con NSOperationQueue en iOS 4 (iPhone)
- 8. NSThread vs. NSOperationQueue vs. ??? en el iPhone
- 9. NSOperation y CoreData Threading
- 10. Pause NSOperation
- 11. cómo pausar/reanudar un hilo
- 12. NSURLConnection asincrónico con NSOperation
- 13. ¿Cómo pausar en C?
- 14. Unit Test NSOperation?
- 15. cancelAllOperations no funciona en [NSOperationQueue mainQueue]
- 16. NSURLConnection en NSOperation
- 17. Manera segura de cambiar la prioridad de una NSOperation
- 18. persistente NSOperationQueue
- 19. NSOperationQueue y concurrente versus no simultáneo
- 20. [NSOperation cancelAllOperations]; no detiene la operación
- 21. ¿Cómo hago una NSURLConnection Asychronous dentro de una NSOperation?
- 22. ¿Cómo pausar una ejecución de vbscript?
- 23. NSOperation en el iPhone
- 24. Reordenar NSOperationQueue
- 25. ¿Cómo pausar una llamada a setTimeout?
- 26. - [NSOperationQueue operations] devuelve una matriz vacía cuando no debería?
- 27. ¿Cómo pausar usando DownloadManager?
- 28. NSOperation, observer and thread error
- 29. métodos asincrónicos en NSOperation
- 30. Usando NSThread dormir en una NSOperation
Gracias! Traté de implementarlo desde tu enlace. Agregué una nueva variable llamada 'isPaused' dentro de NSOperation y cada vez que necesito pausar la operación, estableceré su valor en YES. Dentro de NSOperation verificare regularmente el valor de 'isPaused'. Siempre que lo encuentre en "SÍ" saldré del círculo. Pero tengo un problema serio aquí. Estoy tratando de establecer el valor de 'isPaused' del hilo principal. Esto puede conducir a algunas condiciones de carrera. ¿Hay alguna manera de deshacerse de las condiciones de carrera? ¿Hay alguna manera de llamar a los métodos (pausar y reanudar) en el mismo hilo (en lugar del hilo principal)? – Advaith
@Advaith: Si ambos hilos bloquean un mutex antes de leer o escribir en 'isPaused', no tendrás que preocuparte por las carreras. –