mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-04-14 14:43:33 +02:00
Syncronisation des Zeichenthreads mit update/draw über eigenen Zustand
delay() setzt den Zustand auf DELAYED und der Zeichenthread läuft weiter, wenn der update/draw Thread in diesen Zustand wechselt (also delay() aufgerufen wurde). Es wird nicht mehr Thread.getState() geprüft, dies zu unzuverlässi gwar.
This commit is contained in:
@@ -41,7 +41,8 @@ public final class Options {
|
|||||||
PAUSED,
|
PAUSED,
|
||||||
STOPPED,
|
STOPPED,
|
||||||
TERMINATED,
|
TERMINATED,
|
||||||
IDLE
|
IDLE,
|
||||||
|
DELAYED
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import java.util.logging.Level;
|
|||||||
* Die Klasse übernimmt die Initialisierung eines Programmfensters und der
|
* Die Klasse übernimmt die Initialisierung eines Programmfensters und der
|
||||||
* nötigen Komponenten.
|
* nötigen Komponenten.
|
||||||
*/
|
*/
|
||||||
// TODO: Refactorings (besonders in Bezug auf Nebenläufigkeit)
|
@SuppressWarnings( "unused" )
|
||||||
public class Zeichenmaschine extends Constants {
|
public class Zeichenmaschine extends Constants {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -966,6 +966,7 @@ public class Zeichenmaschine extends Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long timer = 0L;
|
long timer = 0L;
|
||||||
|
/*
|
||||||
if( updateState == Options.AppState.DRAWING ) {
|
if( updateState == Options.AppState.DRAWING ) {
|
||||||
// Falls gerade draw() ausgeführt wird, zeigen wir den aktuellen
|
// Falls gerade draw() ausgeführt wird, zeigen wir den aktuellen
|
||||||
// Stand der Zeichnung auf der Leinwand an. Die Zeit für das
|
// Stand der Zeichnung auf der Leinwand an. Die Zeit für das
|
||||||
@@ -974,7 +975,9 @@ public class Zeichenmaschine extends Constants {
|
|||||||
canvas.render();
|
canvas.render();
|
||||||
timer = System.nanoTime() - timer;
|
timer = System.nanoTime() - timer;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
Options.AppState oldState = updateState;
|
||||||
try {
|
try {
|
||||||
int sub = (int) Math.ceil(timer / 1000000.0);
|
int sub = (int) Math.ceil(timer / 1000000.0);
|
||||||
|
|
||||||
@@ -982,9 +985,12 @@ public class Zeichenmaschine extends Constants {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateState = Options.AppState.DELAYED;
|
||||||
Thread.sleep(ms - sub, (int) (timer % 1000000L));
|
Thread.sleep(ms - sub, (int) (timer % 1000000L));
|
||||||
} catch( InterruptedException ex ) {
|
} catch( InterruptedException ex ) {
|
||||||
// Nothing
|
// Nothing
|
||||||
|
} finally {
|
||||||
|
updateState = oldState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1188,7 +1194,7 @@ public class Zeichenmaschine extends Constants {
|
|||||||
private void enqueueEvent( InputEvent evt ) {
|
private void enqueueEvent( InputEvent evt ) {
|
||||||
eventQueue.add(evt);
|
eventQueue.add(evt);
|
||||||
|
|
||||||
if( isPaused() || isStopped()) {
|
if( isPaused() || isStopped() ) {
|
||||||
dispatchEvents();
|
dispatchEvents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1384,9 +1390,9 @@ public class Zeichenmaschine extends Constants {
|
|||||||
* // Next frame has started
|
* // Next frame has started
|
||||||
* </code></pre>
|
* </code></pre>
|
||||||
* <p>
|
* <p>
|
||||||
* Die {@link schule.ngb.zm.util.tasks.FrameSynchronizedTask} implementiert eine
|
* Die {@link schule.ngb.zm.util.tasks.FrameSynchronizedTask} implementiert
|
||||||
* {@link schule.ngb.zm.util.tasks.Task}, die sich automatisch auf diese Wiese
|
* eine {@link schule.ngb.zm.util.tasks.Task}, die sich automatisch auf
|
||||||
* mit dem Zeichenthread synchronisiert.
|
* diese Wiese mit dem Zeichenthread synchronisiert.
|
||||||
*/
|
*/
|
||||||
public static final Object globalSyncLock = new Object[0];
|
public static final Object globalSyncLock = new Object[0];
|
||||||
|
|
||||||
@@ -1696,9 +1702,8 @@ public class Zeichenmaschine extends Constants {
|
|||||||
*/
|
*/
|
||||||
public boolean isWaiting() {
|
public boolean isWaiting() {
|
||||||
//return running && updateThread.getState() == Thread.State.TIMED_WAITING;
|
//return running && updateThread.getState() == Thread.State.TIMED_WAITING;
|
||||||
return running && updateThread != null && updateThread.getState() == Thread.State.TIMED_WAITING;
|
//return running && updateThread != null && updateThread.getState() == Thread.State.TIMED_WAITING;
|
||||||
//|| updateThread.getState() == Thread.State.WAITING
|
return running && updateThread != null && updateState == Options.AppState.DELAYED;
|
||||||
//|| updateThread.getState() == Thread.State.BLOCKED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user