Подождите, чтобы преформировать функцию, не останавливая процесс - PullRequest
0 голосов
/ 24 октября 2019

Я хочу подождать 300 мс после запуска 2 строк, чтобы снова запустить те же 2 строки, не останавливая поток.

wait(300); и Thread.sleep(300); вместе с некоторым циклом, который я нашел в SO (ниже)либо заморозьте поток, либо выйдите из него (?), либо запустите поток, выполнив функцию миллион раз.

Я хочу подождать 300 миллисекунд, а затем запустить

mc.player.rotationPitch = 90;
mc.playerController.processRightClick(mc.player, mc.world, hand);

без замораживания потока, поскольку иногда он не работает должным образом, если поток заморожен, и это раздражает пользователя, если он будет зависать каждый раз.

Я пытался wait, Thread.sleep, TimeUnit.MILLISECONDS.sleep и

                long lastNanoTime = System.nanoTime();
                long nowTime = System.nanoTime();
                while(nowTime/1000000 - lastNanoTime /1000000 < 300 )
                {
                    nowTime = System.nanoTime();
                    System.out.println("KAMI: Tried to pick up bucket");

                } 

Я уже показал соответствующие примеры выше. Полный код здесь

Ожидается: поток работает нормально, и мои 2 строки (шаг вращения и щелчок правой кнопкой мыши) проходят через 300 миллисекунд после предыдущего шага вращения и щелчка правой кнопкой мыши

Фактические результаты: прокомментированы в коде. В зависимости от используемого метода поток либо лагает, либо выходит, либо падает

1 Ответ

0 голосов
/ 24 октября 2019

Вам понадобится другой поток, чтобы сделать это "без замораживания" текущего потока. Это можно сделать довольно легко, например:

import java.lang.Thread;

public class Main {

    public static abstract class After extends Thread {

        private int sleep = 0;

        public After(int sleep) {
            this.sleep = sleep;
        }

        public void run() {
            try {
                Thread.sleep(this.sleep);
            } catch(InterruptedException e) {
                //do something with e
            }
            this.after();
        }

        public abstract void after();
    }

    public static void main(String[] args) {
        After after = new After(300) {
            public void after() {
                //mc.player.rotationPitch = 90;
                //mc.playerController.processRightClick(mc.player, mc.world, hand);
                System.out.println("testing");
            }
        };
        after.start(); //this will execute the code in 300 ms

        //do what ever you want to do during the 300ms

        after.join(); //join all threads at the end of your code
        System.out.println("done");
    }
}

Используйте After, если вы хотите создать задержку. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...