Actualmente estoy usando un temporizador para ejecutar alguna función cada intervalo de tiempo. Sin embargo, más adelante cuando quiero cambiar el intervalo de ejecución de la función, no puedo cancelar el programa anterior. ¿Cómo se puede resolver esto? Graciascómo cancelar la programación existente de un temporizador
Respuesta
Con el método timer.cancel()
puede cancelar el temporizador y todas las tareas programadas. (Ver API documentation) o puede llamar al método cancelar en su TimerTask timertask.cancel()
(ver API documentation)
Si desea cambiar la hora programada se debe cancelar el TimerTask y añadir un nuevo TimerTask.
TimerTask # cancel y luego Timer # purge() no funciona. Todavía se ejecuta. – JohnyTex
Podría considerar utilizar un ScheduledThreadPoolExecutor en lugar de un Timer
.
El uso es bastante directo. Se crea una instancia de un ejecutor:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
Y luego cuando se desea añadir una tarea de llamar:
executor.scheduleAtFixedRate(myRunnable, delay, interval, unit);
Dónde myRunnable
es su tarea (que implementa el -interface Runnable
), es delay
cuánto tiempo antes de que se ejecute la tarea la primera vez, interval
es el tiempo transcurrido entre la ejecución de la tarea después de la primera ejecución. delay
y interval
se miden según el parámetro unit
, que puede ser TimeUnit. * (Donde * es SECONDS, MINUTES, MILLISECONDS etc.).
continuación para detener la ejecución de llamar:
executor.shutdownNow();
y luego se puede volver a presentar su tarea con un intervalo diferente.
Nota: Puede que necesite crear una nueva instancia del ejecutor antes de volver a enviar su tarea, pero no estoy muy seguro de por qué.
¿cómo es diferente de un temporizador? – njzk2
Este enlace le dice un poco sobre las diferencias: http://www.dremsus.com/index.php/2011/03/why-scheduledthreadpoolexecutor-for-smartfoxserver-2x/ También esta pregunta sobre Stackoverflow aborda las diferencias: http: //stackoverflow.com/questions/409932/java-timer-vs-executorservice – kaspermoerch
¿Hay alguna forma de que no necesite cerrar el ejecutor o cerrar el temporizador? No quiero crear una nueva instancia del ejecutor o el objeto del temporizador ... – user301
- 1. cancelar UIAlertView programación
- 2. programación ftp: cómo cancelar la transferencia de archivos?
- 3. Cancelar mediante programación un flujo de trabajo de SharePoint
- 4. Cómo cancelar un jquery.load()?
- 5. Cómo cancelar un AlertDialog.Builder
- 6. cocos2d: Cómo configurar un temporizador
- 7. Importación mediante programación de un proyecto existente en Eclipse
- 8. ¿Cómo puedo "cancelar" un CountDownLatch?
- 9. Cómo cancelar/restablecer un UIGestureRecognizer
- 10. Cómo se puede cancelar un proceso de ejecución de SQL Server mediante programación
- 11. Python: ¿Cómo se muestra un temporizador en un terminal?
- 12. Cómo cancelar elementos pendientes de un ScheduledThreadPoolExecutor?
- 13. Cómo cancelar un local de Git cometer
- 14. cómo detener un temporizador desencadenado runloop?
- 15. ¿Cómo configurar un temporizador en Java?
- 16. Cómo crear un temporizador usando tkinter?
- 17. Crear un temporizador de iOS
- 18. ¿Cómo incluir un temporizador en Bash Scripting?
- 19. ¿cómo pausar y reanudar un temporizador?
- 20. ¿Por qué la función impulso asio expires_from_now() cancelar un deadline_timer?
- 21. ¿Cómo reiniciar un temporizador en C#?
- 22. ¿Cómo escribo un temporizador en Objective-C?
- 23. Cómo establecer un temporizador en javascript
- 24. ¿Cómo creo un temporizador en WPF?
- 25. Cómo crear un temporizador en WinApi (C++)?
- 26. ¿Cómo configurar un temporizador en aplicaciones wp7?
- 27. C# - ¿cómo se detiene un temporizador?
- 28. Cómo detener el temporizador durante la depuración
- 29. dispatch_source_cancel en un temporizador suspendido provoca EXC_BAD_INSTRUCTION
- 30. Cómo cancelar un trabajo programado en Quartz
¿qué quiere decir "no puedo cancelar el horario anterior"? ¿No sabes cómo hacerlo, o es que no se ajusta a tu arquitectura? – njzk2
Quiero cancelar el programa anterior y comenzar un nuevo horario con un intervalo diferente. Sin embargo, para el temporizador, parece que no hay forma de hacer esto ... tan frustrante – user301
que tiene que cancelar el temporizador y recrear uno – njzk2