public class SimProcess
extends java.lang.Object
actions which describes the life of a process of this class.
Whenever a process instance starts, its actions method
begins executing.
Just like an event, a process must first be constructed, then scheduled.
Scheduling a process is equivalent to placing an event in the event list
that will start this process when
the simulation clock reaches the specified time.
The toString method can be overridden to return
information about the process. This information will
be returned when formating the event list as a string, if the
process is delayed.
A process can be in one of the following states: INITIAL,
EXECUTING, DELAYED, SUSPENDED, and DEAD
.
At most one process can be in the EXECUTING state at
any given time, and when there is one, this executing process
(called the current process) is said to have control
and is executing one of the instructions of its actions method.
A process that has been constructed but not yet scheduled is in
the INITIAL state.
A process is in the DELAYED state if there is a planned event
in the event list to activate it (give it control).
When a process is scheduled, it is placed in the DELAYED state.
It is in the SUSPENDED state if it is waiting to be reactivated
(i.e., obtain control) without having an event to do so in the event list.
A process can suspends itself by calling suspend directly or
indirectly (e.g., by requesting a busy Resource).
Usually, a SUSPENDED process must be reactivated by another process
or event via the resume method.
A process in the DEAD state no longer exists.
To construct new processes, the user needs to extend SimProcess.
Note: the user needs to ensure that the actions method of any process can be terminated, i.e., no infinite loops. For example, using threads process-oriented simulator, if such a method never terminates, threads will not be recycled, causing memory problems.
| Modifier and Type | Field and Description |
|---|---|
static int |
DEAD
The process has terminated its execution.
|
static int |
DELAYED
The process is not executing but has an event in the event list to
reactivate it later on.
|
static int |
EXECUTING
The process is the one currently executing its
actions method. |
static int |
INITIAL
The process has been created but not yet scheduled.
|
static double |
STARTING |
static int |
SUSPENDED
The process is not executing and will have to be reactivated by another
process or event later on.
|
static double |
WAITING |
| Constructor and Description |
|---|
SimProcess()
Constructs a new process without scheduling it
and associates this new process with the default simulator; one
can get additional knowledge with
Simulator static methods. |
SimProcess(ProcessSimulator sim)
Constructs a new process associated with sim
without scheduling it.
|
| Modifier and Type | Method and Description |
|---|---|
void |
actions()
This is the method that is called when this process is
executing.
|
boolean |
cancel()
Cancels the activating event that was supposed to resume
this process, and places the process in the SUSPENDED state.
|
void |
delay(double delay)
Suspends the execution of the currently executing process and
schedules it to resume its execution in delay units of simulation
time.
|
double |
getDelay()
If the process is in the DELAYED state, returns
the remaining time until the planned occurrence of its
activating event.
|
int |
getState()
Returns the state of the process.
|
static void |
init()
This method calls ProcessSimulator.initDefault(),
which initializes the default simulator to use processes.
|
boolean |
isAlive()
Returns true if the process is alive, otherwise false.
|
void |
kill()
Terminates the life of this process and sets its state to
DEAD, after canceling its activating event if there is one.
|
double |
priority()
Returns the priority of the current variable.
|
void |
reschedule(double delay)
If the process is in the DELAYED state, removes it from
the event list and reschedules it in delay units of time.
|
void |
resume()
Places this process at the beginning of the event list
to resume its execution.
|
void |
schedule(double delay)
Schedules the process to start in delay time units.
|
Event |
scheduledEvent()
Returns the Event associated with the current variable.
|
void |
scheduleNext()
Schedules this process to start at the current time, by placing
it at the beginning of the event list.
|
void |
setPriority(double priority)
Sets the priority assigned to the current variable in the simulation.
|
void |
setScheduledEvent(Event scheduledEvent)
Sets the event associated to the current variable.
|
void |
suspend()
This method can only be invoked for the EXECUTING
or a DELAYED process.
|
public static final int INITIAL
public static final int EXECUTING
actions method.public static final int DELAYED
public static final int SUSPENDED
public static final int DEAD
public static final double STARTING
public static final double WAITING
public SimProcess()
Simulator static methods.
It will have to be scheduled later on.
The process is in the INITIAL state.public SimProcess(ProcessSimulator sim)
sim - Link the current variable to ProcessSimulator simpublic void schedule(double delay)
delay - delay, in simulation time, before the process startspublic void scheduleNext()
public Event scheduledEvent()
public void setScheduledEvent(Event scheduledEvent)
scheduledEvent - new scheduledEvent for the current variablepublic double priority()
public void setPriority(double priority)
priority - priority assigned to the current variable in the simulationpublic final boolean isAlive()
public int getState()
public double getDelay()
java.lang.IllegalStateException - if the process is not in DELAYED statepublic void reschedule(double delay)
delay(5.0)
at time 10.0, and another process invokes reschedule(p, 6.2)
at time 13.5, then the process p will resume at time
13.5 + 6.2 = 19.7.delay - new delay, in simulation time units, before the process starts or is resumedpublic void resume()
public boolean cancel()
public void delay(double delay)
public void suspend()
public void kill()
public void actions()
public static void init()
To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.