ptolemy.domains.de.kernel
Class DEThreadActor

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.domains.de.kernel.DEActor
                              extended by ptolemy.domains.de.kernel.DEThreadActor
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.lang.Runnable, Actor, Executable, FiringsRecordable, Initializable, SequenceActor, TimedActor, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public abstract class DEThreadActor
extends DEActor
implements java.lang.Runnable

A base class for threaded DE domain actors.

NOTE: This actor is very preliminary. It is not developed and maintained for a long time. We do not recommend using it. To try multiple threads under DE semantics, use DDE domain, which is another experimental domain.

This actor, upon its initialization, will start another thread. The thread communicate with the DEDirector thread by placing events into the DEEventQueue asynchronously.

Subclass of this class should implement the run() method. The subclass is executed in an event driven way. More precisely, the implementation of the run() method should call waitForNewInputs() after processing all current events. The calls are blocked until the next time fire() is called. Recall that the Director (after putting events into the receiver of the input ports) will call fire() on the actor. NOTE: The synchronization mechanism is implemented in DECQEventQueue to ensure the correct multi-threading behaviour.

This implementation does not change the semantics of DEReceiver, but still supports an asynchronous message passing type of concurrency.

Since:
Ptolemy II 0.2
Version:
$Id: DEThreadActor.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Lukito Muliadi
See Also:
DEActor, Serialized Form
Accepted Rating:
Red (cxh)
Proposed Rating:
Red (lmuliadi)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  boolean _isWaiting
           
private static java.lang.Object _monitor
           
private  PtolemyThread _thread
           
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
DEThreadActor(TypedCompositeActor container, java.lang.String name)
          Constructor.
 
Method Summary
private  void _emptyPorts()
           
 void fire()
          Awake the thread running this actor.
 void initialize()
          Create a thread for the actor and start the thread.
abstract  void run()
          Implement this method to define the job of the threaded actor.
 void waitForNewInputs()
          Clear input ports then wait until input events arrive.
 void waitForNewInputs(IOPort[] ports)
          Wait for new inputs on the specified array of ports.
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, clone, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeChanged, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

_isWaiting

private boolean _isWaiting

_monitor

private static java.lang.Object _monitor

_thread

private PtolemyThread _thread
Constructor Detail

DEThreadActor

public DEThreadActor(TypedCompositeActor container,
                     java.lang.String name)
              throws NameDuplicationException,
                     IllegalActionException
Constructor.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the entity cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

fire

public void fire()
Awake the thread running this actor.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor

initialize

public void initialize()
Create a thread for the actor and start the thread.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor

run

public abstract void run()
Implement this method to define the job of the threaded actor.

Specified by:
run in interface java.lang.Runnable

waitForNewInputs

public void waitForNewInputs()
Clear input ports then wait until input events arrive.


waitForNewInputs

public void waitForNewInputs(IOPort[] ports)
                      throws IllegalActionException
Wait for new inputs on the specified array of ports.

Parameters:
ports - The array of ports whose inputs we're interested in.
Throws:
IllegalActionException - If the specified array of ports is not all input ports.

_emptyPorts

private void _emptyPorts()