79 lines
2.0 KiB
Java
79 lines
2.0 KiB
Java
package org.firstinspires.ftc.teamcode.threadopmode;
|
|
|
|
public class TaskThread {
|
|
|
|
Actions actions;
|
|
int delay;
|
|
TaskRunnable taskRunnable;
|
|
|
|
/** Creates an object that contains code to be ran periodically on a separate thread
|
|
* Can be registered to a {@link ThreadOpMode} with {@link ThreadOpMode#registerThread(TaskThread)}
|
|
*
|
|
* @param actions An {@link Actions} interface that contains code to run periodically
|
|
* The default delay between runs is 0 milliseconds
|
|
*/
|
|
public TaskThread(Actions actions) {
|
|
this(0, actions);
|
|
}
|
|
|
|
/** Creates an object that contains code to be ran periodically on a separate thread.
|
|
* Can be registered to a {@link ThreadOpMode} with {@link ThreadOpMode#registerThread(TaskThread)}.
|
|
*
|
|
* @param delay The delay in milliseconds between each periodic run of the code.
|
|
* @param actions An {@link Actions} interface that contains code to run periodically.
|
|
*/
|
|
public TaskThread(int delay, Actions actions) {
|
|
this.actions = actions;
|
|
this.delay = delay;
|
|
this.taskRunnable = new TaskRunnable();
|
|
}
|
|
|
|
/**
|
|
* An interface to be passed to a {@link TaskThread} constructor.
|
|
*/
|
|
public interface Actions {
|
|
/**
|
|
* Robot code to be ran periodically on its own thread.
|
|
*/
|
|
public void loop();
|
|
}
|
|
|
|
void start() {
|
|
taskRunnable.start();
|
|
}
|
|
|
|
void stop() {
|
|
taskRunnable.stop();
|
|
}
|
|
|
|
class TaskRunnable implements Runnable {
|
|
private Thread t;
|
|
|
|
TaskRunnable() {
|
|
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
while(!t.isInterrupted()) {
|
|
actions.loop();
|
|
Thread.sleep(delay);
|
|
}
|
|
} catch (InterruptedException e) {
|
|
|
|
}
|
|
}
|
|
|
|
public void start() {
|
|
if (t == null) {
|
|
t = new Thread(this);
|
|
t.start();
|
|
}
|
|
}
|
|
|
|
public void stop() {
|
|
t.interrupt();
|
|
}
|
|
}
|
|
}
|