Ниже приведен код - http://pi4j.com/example/listener.html (слушать GPIO). Мне было интересно, есть ли способ отключить событие от увольнения за определенный временной интервал. Например, у меня есть детектор движения и вы хотите настроить его так, чтобы после обнаружения движения он включал свет. Однако, если в течение следующих 15 минут (после включения света) будет обнаружено движение, эти события (движение) должны быть отброшены.Отключение событий за определенное время
public class ListenGPIO {
public static void main(String args[]) throws InterruptedException {
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN);
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin() + " = " + event.getState());
}
});
System.out.println(" ... complete the GPIO #02 circuit and see the listener feedback here in the console.");
for (;;) {
Thread.sleep(500);
}
}
}
Я попытался добавить Thread.sleep внутри handleGpioPinDigitalStateChangeEvent но помещает событие-нить спать, но как только поток просыпается он начинает обработку событий от лица т.е. события сохраняются в какой-то очереди и они обрабатываются, которых я хочу избежать.
как бы отключить прослушиватель событий каждые 15 минут после его запуска. System.currentTimeMillis() возвращает разность, измеренную в миллисекундах, между текущим временем и полночью, 1 января 1970 г. UTC (время для linux). В первый раз, когда событие должно срабатывать, а затем даже если событие срабатывает, действие не должно выполняться в течение 15 минут с момента запуска события. – srock
В течение 15 минут в примере выше вы устанавливаете TIME_TO_IGNORE_EVENTS на «1000/* ms */* 60/* s */* 15/* 15 минут * /' – ControlAltDel