mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-04-14 06:33:34 +02:00
Eine TaskQueue in der Tasks geplant werden können
Es können Tasks (Runnables) für die geplante Ausführung (z.B. in 100 ms) übergeben werden. Die Tasks werden dann jeweils am Ende eines Frames abgearbeitet. Bei Bedarf auch parallel mit dem TaskRunner. Das System sollte noch einmal Refactored werden. (Und ggf. auch auf seine Sinnhaftigkeit geprüft werden.)
This commit is contained in:
@@ -143,6 +143,9 @@ public class Zeichenmaschine extends Constants {
|
|||||||
// Hauptthread der Zeichenmaschine.
|
// Hauptthread der Zeichenmaschine.
|
||||||
private Thread mainThread;
|
private Thread mainThread;
|
||||||
|
|
||||||
|
// Queue für geplante Aufgaben
|
||||||
|
private DelayQueue<DelayedTask> taskQueue = new DelayQueue<>();
|
||||||
|
|
||||||
// Queue für abgefangene InputEvents
|
// Queue für abgefangene InputEvents
|
||||||
private BlockingQueue<InputEvent> eventQueue = new LinkedBlockingQueue<>();
|
private BlockingQueue<InputEvent> eventQueue = new LinkedBlockingQueue<>();
|
||||||
|
|
||||||
@@ -519,6 +522,23 @@ public class Zeichenmaschine extends Constants {
|
|||||||
running = false;
|
running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Führt interne Aufräumarbeiten durch.
|
||||||
|
* <p>
|
||||||
|
* Wird nach dem {@link #stop() Stopp} der Zeichenmaschine aufgerufen und
|
||||||
|
* verbleibende Threads, Tasks, etc. zu stoppen und aufzuräumen. Die
|
||||||
|
* Äquivalente Methode für Unterklassen ist {@link #teardown()}, die direkt
|
||||||
|
* vor {@code cleanup()} aufgerufen wird.
|
||||||
|
*/
|
||||||
|
private void cleanup() {
|
||||||
|
// Alle noch nicht ausgelösten Events werden entfernt
|
||||||
|
eventQueue.clear();
|
||||||
|
// Alle noch nicht ausgeführten Tasks werden entfernt
|
||||||
|
taskQueue.clear();
|
||||||
|
// TaskRunner stoppen
|
||||||
|
TaskRunner.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Beendet die Zeichenmaschine vollständig.
|
* Beendet die Zeichenmaschine vollständig.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -568,8 +588,8 @@ public class Zeichenmaschine extends Constants {
|
|||||||
* sichergestellt hat, dass eine Änderung der Größe der Zeichenfläche
|
* sichergestellt hat, dass eine Änderung der Größe der Zeichenfläche
|
||||||
* zulässig und sinnvoll ist.
|
* zulässig und sinnvoll ist.
|
||||||
*
|
*
|
||||||
* @param width Neue Breite der Zeichenleinwand.
|
* @param newWidth Neue Breite der Zeichenleinwand.
|
||||||
* @param height Neue Höhe der Zeichenleinwand.
|
* @param newHeight Neue Höhe der Zeichenleinwand.
|
||||||
* @see #setSize(int, int)
|
* @see #setSize(int, int)
|
||||||
* @see #setFullscreen(boolean)
|
* @see #setFullscreen(boolean)
|
||||||
*/
|
*/
|
||||||
@@ -1048,7 +1068,6 @@ public class Zeichenmaschine extends Constants {
|
|||||||
/*
|
/*
|
||||||
* Task scheduling
|
* Task scheduling
|
||||||
*/
|
*/
|
||||||
private DelayQueue<DelayedTask> taskQueue = new DelayQueue<>();
|
|
||||||
|
|
||||||
public void scheduleTask( Runnable runnable, int delay ) {
|
public void scheduleTask( Runnable runnable, int delay ) {
|
||||||
taskQueue.add(new DelayedTask(delay, runnable));
|
taskQueue.add(new DelayedTask(delay, runnable));
|
||||||
@@ -1065,8 +1084,8 @@ public class Zeichenmaschine extends Constants {
|
|||||||
DelayedTask task = taskQueue.poll();
|
DelayedTask task = taskQueue.poll();
|
||||||
while( task != null ) {
|
while( task != null ) {
|
||||||
if( task.concurrent ) {
|
if( task.concurrent ) {
|
||||||
SwingUtilities.invokeLater(task.runnable);
|
// SwingUtilities.invokeLater(task.runnable);
|
||||||
// new Thread(task.runnable).start();
|
TaskRunner.run(task.runnable);
|
||||||
} else {
|
} else {
|
||||||
task.runnable.run();
|
task.runnable.run();
|
||||||
}
|
}
|
||||||
@@ -1364,7 +1383,9 @@ public class Zeichenmaschine extends Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class DelayedTask implements Delayed {
|
class DelayedTask implements Delayed {
|
||||||
|
|
||||||
long startTime; // in ms
|
long startTime; // in ms
|
||||||
|
|
||||||
Runnable runnable;
|
Runnable runnable;
|
||||||
|
|
||||||
boolean concurrent = false;
|
boolean concurrent = false;
|
||||||
@@ -1376,13 +1397,16 @@ public class Zeichenmaschine extends Constants {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getDelay( TimeUnit unit ) {
|
public long getDelay( TimeUnit unit ) {
|
||||||
int diff = (int)(startTime - System.currentTimeMillis());
|
int diff = (int) (startTime - System.currentTimeMillis());
|
||||||
return unit.convert(diff, TimeUnit.MILLISECONDS);
|
return unit.convert(diff, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo( Delayed o ) {
|
public int compareTo( Delayed o ) {
|
||||||
return (int) (startTime- ((DelayedTask)o).startTime);
|
return (int) (startTime - ((DelayedTask) o).startTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class InputListener implements MouseInputListener, MouseMotionListener, MouseWheelListener, KeyListener{
|
class InputListener implements MouseInputListener, MouseMotionListener, MouseWheelListener, KeyListener{
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user