/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package servidor.utiles;

public class PerfTimer {

   private final long lapso;
   private final Runnable task;
   private Thread hiloTimer;
   private double milisecActual;
   private boolean parar = false;

   public PerfTimer(int lapso, Runnable task) {
      this.lapso = lapso;
      this.task = task;
   }

   public void start() {
      hiloTimer = new PerfTimerThread();
      milisecActual = 0;
      parar = false;
      hiloTimer.start();
   }

   public void stop() {
      parar = true;
   }

   class PerfTimerThread extends Thread {
      @Override
      public void run() {
         while (!parar) {
            double ahora = System.nanoTime() / 1000000.0;
            if (ahora - milisecActual > lapso) {
               milisecActual = ahora;
               try {
                  task.run();
               } catch (Exception exc) {
                  exc.printStackTrace();
               }
            } else {
               try {
                  interrupted();
                  sleep(100);
               } catch (Exception exc) {
                  exc.printStackTrace();
               }
            }
         }
      }
   }
}
