App
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
mhr.appcore.tasks.RenderingTask Class Reference

Třída zodpovědná za asynchronní vykreslování změn na obraze. More...

Inheritance diagram for mhr.appcore.tasks.RenderingTask:

Classes

class  Lock
 Třída, jejíž instance slouží k synchronizaci vláken. Obsahuje synchronizované položky a flagy. More...
 
enum  RenderScope
 Výčet určující rozsah a způsob renderování. More...
 

Public Member Functions

 RenderingTask (AppCore app)
 Defaultní koknstruktor, pouze zaregistruje svoji příslušnost k aplikaci. Pro inicializaci je nutno zavolat init.
 
void init () throws IllegalStateException
 Provede inicializaci, třída si vš potřebné vezme z AppCore, ke které je zaregistrovaná. Pro provedení inicializace musí být vlákno zastaveno.
 
synchronized void dispose ()
 
void setThreadEH (Thread.UncaughtExceptionHandler handler)
 
synchronized void start ()
 Spustí vlákno pro renderování.
 
synchronized void stop ()
 Zastaví vlákno pro renderování.
 
void susepnd (Object o) throws NullPointerException, IllegalStateException
 Zadá požadavek na uspání vlákna.
 
void wake (Object o) throws NullPointerException, IllegalStateException
 Probudí uspané vlákno.
 
boolean isSuspended ()
 vrací informaci o tom, jestli je vlákno uspané.
 
void renderOnThisThread ()
 Provede renderování na vlákně, které tuto funkci volá. Provede se chytré renderování změněné oblasti, jak ji určí Image.
 
void render ()
 Udává, jaká metoda se použije pro renderování.
 
void renderAll ()
 Zadá požadavek na kompletní přerenderování obrazu.
 
void renderHeuristic ()
 Zadá požadavek na chytré renderování.
 
void run ()
 

Protected Member Functions

void finalize () throws Throwable
 

Protected Attributes

Image image = null
 Obraz, na kterém se překreslování volá
 
NBitmap wrOutput = null
 NBitmapa obalená okolo vstupu pro disp.
 
NBitmap wrTmp = null
 NBitmapa, do které se renderuje a z které se pak kopíruje - pro omezení problikávání místo std double bufferingu.
 
PDDisplayer disp = null
 Této třídě se předává výstupní obraz, stará se o výstup na obrazovku.
 
Thread thread = null
 Vlákno, na kterém se renderuje.
 
Lock lock = new Lock()
 Instance třídy, na které se provádí synchronizace a která slouží k ovládání vláken.
 
Thread.UncaughtExceptionHandler handler = null
 
AppCore app
 Reference na aplikaci.
 

Detailed Description

Třída zodpovědná za asynchronní vykreslování změn na obraze.

Definition at line 14 of file RenderingTask.java.

Constructor & Destructor Documentation

mhr.appcore.tasks.RenderingTask.RenderingTask ( AppCore  app)
inline

Defaultní koknstruktor, pouze zaregistruje svoji příslušnost k aplikaci. Pro inicializaci je nutno zavolat init.

Parameters
app

Definition at line 62 of file RenderingTask.java.

{
if (app == null) {
throw new IllegalArgumentException("app should not be null");
}
this.app = app;
}

Member Function Documentation

synchronized void mhr.appcore.tasks.RenderingTask.dispose ( )
inline

Definition at line 86 of file RenderingTask.java.

{
stop();
if (wrTmp != null) {
wrTmp = null;
}
}
void mhr.appcore.tasks.RenderingTask.finalize ( ) throws Throwable
inlineprotected

Definition at line 54 of file RenderingTask.java.

{
}
void mhr.appcore.tasks.RenderingTask.init ( ) throws IllegalStateException
inline

Provede inicializaci, třída si vš potřebné vezme z AppCore, ke které je zaregistrovaná. Pro provedení inicializace musí být vlákno zastaveno.

Exceptions
IllegalStateException

Definition at line 73 of file RenderingTask.java.

{
if (thread != null) {
throw new IllegalStateException("Instance is already in use");
}
this.image = app.getImg();
this.disp = app.getDisp();
if (wrTmp != null) {
}
this.wrTmp = new NBitmap(wrOutput);
}
boolean mhr.appcore.tasks.RenderingTask.isSuspended ( )
inline

vrací informaci o tom, jestli je vlákno uspané.

Returns

Definition at line 192 of file RenderingTask.java.

{
synchronized (lock) {
}
}
void mhr.appcore.tasks.RenderingTask.render ( )
inline

Udává, jaká metoda se použije pro renderování.

Definition at line 211 of file RenderingTask.java.

void mhr.appcore.tasks.RenderingTask.renderAll ( )
inline

Zadá požadavek na kompletní přerenderování obrazu.

Definition at line 219 of file RenderingTask.java.

{
synchronized (lock) {
lock.RENDER_FLAG = true;
lock.scope = RenderScope.ALL;
lock.notifyAll();
}
}
void mhr.appcore.tasks.RenderingTask.renderHeuristic ( )
inline

Zadá požadavek na chytré renderování.

Definition at line 230 of file RenderingTask.java.

{
synchronized (lock) {
lock.RENDER_FLAG = true;
lock.scope = RenderScope.HEURISTIC;
lock.notifyAll();
}
}
void mhr.appcore.tasks.RenderingTask.renderOnThisThread ( )
inline

Provede renderování na vlákně, které tuto funkci volá. Provede se chytré renderování změněné oblasti, jak ji určí Image.

Definition at line 201 of file RenderingTask.java.

{
}
disp.redraw(); // Zbytečný redraw(), ale redraw je dost rychlý...
}
void mhr.appcore.tasks.RenderingTask.run ( )
inline

Definition at line 241 of file RenderingTask.java.

{
RenderScope scope = RenderScope.NONE;
while (true) { // bezi stale
synchronized (lock) {
while (true) {
if (lock.EXIT_FLAG) {
return;
}
while (lock.SUSPEND_FLAG) { // Dokud uspani trva
synchronized (lock.suspendedOn) {
lock.suspendedOn.notifyAll(); // Oznamit tomu kdo ceka na uspani
/*
* Zde byl deadlock - Bude lepsi neustale davat vedet uspanemu kdykoliv probehne smycka...
*
* Deadlock spocival v tom, ze nez se thread dostal do uspane smycky, byl probuzen a znovu uspan, ale uz nedal vedet tomu,
* kdo na druhe uspani cekal...
* Takto se to stat nemuze - pokazde kdyz bude vlakno probuzeno, pokud bude platit SUSPEND_FLAG, da vedet zadateli, at uz bude tento jakykoliv...
*/
}
try {
this.lock.wait(); // Porad cekat
} catch (InterruptedException e) {
return;
}
if (lock.EXIT_FLAG) { // I pokud je uspany muze byt potreba jej ukoncit
return;
}
}
lock.RENDER_FLAG = false;
scope = lock.scope;
break;
}
try {
this.lock.wait();
} catch (InterruptedException e) {
return;
}
}
}
switch (scope) {
case HEURISTIC:
Rect r = null;
while ((r = image.exportChangedToHeuristic(wrTmp)) != null) {
wrTmp.copyTo(wrOutput, r, r.tlx, r.tly);
}
disp.redraw(); // Zbytečný redraw(), ale redraw je dost rychlý...
break;
default:
break;
}
}
}
void mhr.appcore.tasks.RenderingTask.setThreadEH ( Thread.UncaughtExceptionHandler  handler)
inline

Definition at line 98 of file RenderingTask.java.

{
synchronized (lock) {
this.handler = handler;
if (thread != null) {
thread.setUncaughtExceptionHandler(handler);
}
}
}
synchronized void mhr.appcore.tasks.RenderingTask.start ( )
inline

Spustí vlákno pro renderování.

Definition at line 111 of file RenderingTask.java.

{
if (thread != null) {
return;
}
thread = new Thread(this);
if (handler != null) {
thread.setUncaughtExceptionHandler(handler);
}
synchronized (lock) {
lock.EXIT_FLAG = false;
}
thread.start();
}
synchronized void mhr.appcore.tasks.RenderingTask.stop ( )
inline

Zastaví vlákno pro renderování.

Definition at line 128 of file RenderingTask.java.

{
if (thread == null) {
return;
}
synchronized (lock) {
lock.EXIT_FLAG = true;
lock.notifyAll();
}
try {
thread.join();
} catch (InterruptedException exc) {
}
thread = null;
}
void mhr.appcore.tasks.RenderingTask.susepnd ( Object  o) throws NullPointerException, IllegalStateException
inline

Zadá požadavek na uspání vlákna.

   Zadá požadavek na uspání vlákna. Jakmile je vlákno připraveno k uspání, je zavoláno o.notifyAll(). Se stejným objektem musí být zavoláno příslušné wake()
Parameters
oKdo má být informován o úspěšném uspání.
Exceptions
NullPointerException
IllegalStateException

Definition at line 152 of file RenderingTask.java.

{
if (o == null) {
throw new NullPointerException("o cannot be null");
}
synchronized (lock) {
if (lock.suspendedOn != null) {
throw new IllegalStateException("Thread is already suspended by someone else");
}
lock.notifyAll();
}
}
void mhr.appcore.tasks.RenderingTask.wake ( Object  o) throws NullPointerException, IllegalStateException
inline

Probudí uspané vlákno.

Parameters
oobjekt, který vlákno uspal
Exceptions
NullPointerException
IllegalStateException

Definition at line 173 of file RenderingTask.java.

{
if (o == null) {
throw new NullPointerException("o cannot be null");
}
synchronized (lock) {
if (lock.suspendedOn != o) {
throw new IllegalArgumentException("Bad object supplied");
}
lock.suspendedOn = null;
lock.SUSPEND_FLAG = false;
lock.notifyAll();
}
}

Member Data Documentation

AppCore mhr.appcore.tasks.RenderingTask.app
protected

Reference na aplikaci.

Definition at line 48 of file RenderingTask.java.

PDDisplayer mhr.appcore.tasks.RenderingTask.disp = null
protected

Této třídě se předává výstupní obraz, stará se o výstup na obrazovku.

Definition at line 43 of file RenderingTask.java.

Thread.UncaughtExceptionHandler mhr.appcore.tasks.RenderingTask.handler = null
protected

Definition at line 46 of file RenderingTask.java.

Image mhr.appcore.tasks.RenderingTask.image = null
protected

Obraz, na kterém se překreslování volá

Definition at line 40 of file RenderingTask.java.

Lock mhr.appcore.tasks.RenderingTask.lock = new Lock()
protected

Instance třídy, na které se provádí synchronizace a která slouží k ovládání vláken.

Definition at line 45 of file RenderingTask.java.

Thread mhr.appcore.tasks.RenderingTask.thread = null
protected

Vlákno, na kterém se renderuje.

Definition at line 44 of file RenderingTask.java.

NBitmap mhr.appcore.tasks.RenderingTask.wrOutput = null
protected

NBitmapa obalená okolo vstupu pro disp.

Definition at line 41 of file RenderingTask.java.

NBitmap mhr.appcore.tasks.RenderingTask.wrTmp = null
protected

NBitmapa, do které se renderuje a z které se pak kopíruje - pro omezení problikávání místo std double bufferingu.

Definition at line 42 of file RenderingTask.java.


The documentation for this class was generated from the following file: