Таймер, если заявление? - PullRequest
       32

Таймер, если заявление?

0 голосов
/ 12 февраля 2020

Я работаю над проектом робота-зяблика по обнаружению объектов, и в одном из методов я должен сделать оператор if, если зяблик обнаружил объект в течение 5 секунд, понадобится ли мне класс таймера для этого? Пожалуйста помоги. (Новое для Java)

ЕСЛИ Финч обнаруживает объект <= 5 секунд, останавливает и поворачивает светодиод на синий, ИЛИ подождите 1 секунду и продолжит движение в случайном направлении (я уже сделал это) </p>

Редактировать: мой код пока:

publi c stati c void ObjectEncountered () {

    while(true) {

        if(myfinch.isObstacle()== true){
            myfinch.setLED(0, 0, 255);
            myfinch.setWheelVelocities(0, 0); 
        }
        else {

            myfinch.setLED(0, 0, 0);
            random();


        }
    }

}

1 Ответ

0 голосов
/ 13 февраля 2020

Нам нужно больше кода, чтобы ответить. Если ваш метод обнаружения объектов всегда сразу возвращается, тогда достаточно просто оставаться в al oop, пока System.currentTimeMillis () не покажет число более чем на 5000 больше, чем при запуске. Однако, если ваш метод обнаружения объектов не возвращается до тех пор, пока он не обнаружит что-то, возможно, через 20 секунд, тогда вам потребуется некоторое асинхронное программирование, чтобы иметь возможность переключить ваш светодиод на синий в 5-секундной точке.

Этот подход включает в себя выделение другого потока для вызова метода обнаружения, а затем ожидание, пока он не обнаружит что-либо или не пройдет 5 секунд. Вы можете использовать BlockingQueue для связи от одного потока к другому, так как это также предлагает время ожидания. Если вы не заботитесь об обнаруженных объектах через 5 секунд, основной поток может прервать поток обнаружения, что позволит ему корректно завершить работу.

...