package org.Models;
/**
 * Ordonnanceur exécute périodiquement une tâche {@link Runnable} dans un thread séparé.
 */
public class Ordonnanceur extends Thread {

    Runnable runnable;
    long pause;

    /**
     * Crée un nouvel ordonnanceur.
     *
     * @param runnable la tâche à exécuter périodiquement
     * @param pause la durée de pause entre chaque exécution (en millisecondes)
     */
    public Ordonnanceur(Runnable runnable, long pause) {
        this.runnable = runnable;
        this.pause = pause;
    }

    /**
     * Arrête l'ordonnanceur en interrompant le thread.
     */
    public void stopOrdonnanceur() {
        interrupt();
    }

    /**
     * Exécute la tâche périodiquement tant que le thread n'est pas interrompu.
     */
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(pause);
                runnable.run();
            } catch (InterruptedException e) {
                break;
            }
        }
    }
}
