¿Cuál es la forma más precisa para llamar a una función cada N milisegundos?

  • Hilo, con Hilo.el sueño
  • TimerTask
  • Controlador con postDelayed

He modificado este ejemplo el uso de Hilo.el sueño y no es muy exacto.

Estoy desarrollando una aplicación de música que se reproducirá sonidos en un determinado BPM. Entiendo que es imposible crear una totalmente precisa metrónomo y no me necesita – sólo buscando para encontrar la mejor manera de hacer esto.

Gracias

InformationsquelleAutor fxfuture | 2013-09-04

4 Comentarios

  1. 58

    Hay algunas desventajas de usar Temporizador

    • Crea un solo hilo para ejecutar las tareas y si una tarea
      toma demasiado tiempo para ejecutar otras tareas sufrir.
    • No manejar
      las excepciones lanzadas por tareas y el hilo apenas termina, lo que afecta a
      otras tareas programadas y que nunca se ejecute

    ScheduledThreadPoolExecutor trata adecuadamente con todos estos temas y no tiene sentido utilizar el Temporizador.. Hay dos métodos que podrían ser de utilidad en su caso.. scheduleAtFixedRate(…) y scheduleWithFixedDelay(..)

    class MyTask implements Runnable {
    
      @Override
      public void run() {
        System.out.println("Hello world");
      } 
    }
    
    ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
    long period = 100; //the period between successive executions
    exec.scheduleAtFixedRate(new MyTask(), 0, period, TimeUnit.MICROSECONDS);
    long delay = 100; //the delay between the termination of one execution and the commencement of the next
    exec.scheduleWithFixedDelay(new MyTask(), 0, delay, TimeUnit.MICROSECONDS);
    • Wow! Muchas gracias – esto es casi impecable! Significativamente mejor tiempo de mi viejo método
    • Estoy tratando de este método para una tarea periódica, pero no parece funcionar stackoverflow.com/questions/27872016/…
  2. 7

    En Android, puedes crear un Hilo con su propio Controlador/de la Cola de Mensajes. Es bastante precisa. Cuando vea Controlador de documentación se puede ver, que fue diseñado para eso.

    Hay dos usos principales para un Controlador: (1) para la programación de mensajes y runnables para ser ejecutado en algún momento en el futuro; y (2) para poner en cola una acción a ser ejecutada en un subproceso diferente a la suya.

  3. 1

    Todos ellos son la misma precisión sabio. Java precisión de tiempo está sujeto a la precisión y exactitud del sistema de temporizadores y programadores y no está garantizada. Ver El Hilo.el sueño y el Objeto.esperar API.

Dejar respuesta

Please enter your comment!
Please enter your name here