App

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

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.dispose();
wrTmp = null;
}
}

void mhr.appcore.tasks.RenderingTask.finalize | ( |  | ) | throws Throwable
| inlineprotected

Definition at line 54 of file RenderingTask.java.

{
dispose();
}

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.wrOutput = app.getWrOutput();
this.disp = app.getDisp();
if (wrTmp != null) {
wrTmp.dispose();
}
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) {
return lock.SUSPEND_FLAG;
}
}

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.

{
renderHeuristic();
}

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.

{
while (image.exportChangedToHeuristic(wrOutput) != null) {
disp.redraw();
}
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;
}
}
if (lock.RENDER_FLAG) {
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();
}
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

  o | Kdo 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.SUSPEND_FLAG = true;
lock.suspendedOn = o;
lock.notifyAll();
}
}

void mhr.appcore.tasks.RenderingTask.wake | ( | Object | o | ) | throws NullPointerException, IllegalStateException
| inline

Probudí uspané vlákno.

Parameters

  o | objekt, 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:

- /home/xxx/eclipse_workspaces/app/appcore/src/mhr/appcore/tasks/RenderingTask.java