Class: EventScheduler

Environment: Siren
Superclass: Model
Category: Music-Support
Instance variables: appointments timers threads running doWait startTime
delay logTime
Class variables: Schedule

An instance of EventScheduler is a simple driver for real-time message-passing among any classes that can return timed event association values. One uses Schedules by setting up clients which a master scheduler process continuously evaluates for their next timed activations. Clients can return appointments which are sorted into the scheduler's list of (time -> event) associations that is evaluated continuously when running. Changed messages are sent from the accessor messages to simplify EventScheduler browsers and inspectors.

Instance variables:
clients client objects
appointments the schedule
running running schedule?
doWait whether or not the scheduler should do real-time
scheduling--set to false if there is a lower level of scheduling
(e.g., primitive-level) or if output need not be real-time
startTime the clock time I was started at

Class variable:
Schedule shared instance accessed by the class message masterSchedule

See the class examples.

accessing

addClient: theApp
Add the argument, 'theApp', to the instance variable 'appointments'.

addClient: theApp at: start
Add the argument, 'theApp', to the instance variable 'appointments'.

addClient: theApp at: start loop: aBool
Add the argument, 'theApp', to the instance variable 'appointments'.

addClient: theApp in: start
Add the argument, 'theApp', to the instance variable 'appointments'.

addClient: theApp in: start loop: loopBool
Add the argument, 'theApp', to the instance variable 'appointments'.

addClient: theApp loop: aBool
Add the argument, 'theApp', to the instance variable 'appointments'.

addTimer: start
Add the argument, 'theApp', to the instance variable 'timers'.

addTimer: start interval: int
Add the argument, 'theApp', to the instance variable 'timers'.

clientNamed: aName
Answer a named client

clients
Get the instance's clients

clock
Answer the instance's clock (in usec)

delay
Get the instance's delay

delay: aTime
Set the instance's delay

dontWait
Specify that the scheduler should NOT do the waiting--i.e., there is a lower level of scheduling going on

isRunning
Answer the instance variable 'running'.

removeClient: aClient
Add the argument, 'theApp', to the instance variable 'timers'.

removeClientNamed: aClient
Add the argument, 'theApp', to the instance variable 'timers'.

removeTimer: aTimer
Add the argument, 'theApp', to the instance variable 'timers'.

removeTimerNamed: aTimer
Add the argument, 'theApp', to the instance variable 'timers'.

resetClock
Reset the instances clock (in usec)

timerNamed: aName
Answer a named timer

timers
Answer the instance's timers

wait
Specify that the scheduler should do the waiting--i.e., Smalltalk-level real-time.

updating

update: anAspect
Check if clients are waiting

running

callNextAppointment
Calls upon the next appointment to be made and then reschedules the next one

flush
Reset the appointment list.

interrupt
Stop a running scheduler.

processEvent: entry at: now
Handle an event or timer

run
Set up the first meetings and then run them all till no one wants a meeting anymore.

run: theBool
Accept the argument, 'theBool', as the instance variable 'running'.

initialize release

initialize
Set up the default Schedule

release
Clean up the schedule.

MetaClass: EventScheduler class

examples

scheduleExample
Play MIDI using the event scheduler.

scheduleExample2
Play MIDI using the event scheduler.

timerExample
Start some timers in the event scheduler.

class initialization

initialize
Set up the global Scheduler.

release
Clear away the global EventScheduler.

instance control

addClient: aT
Add a timer to the instance

addClient: aT at: theTime
Add a timer to the instance

addClient: aT in: theTime
Add a timer to the instance

addClient: aT in: theTime loop: loopBool
Add a timer to the instance

addTimer: aT
Add a timer to the instance

addTimer: aT interval: int
Add a timer to the instance

clients
Get the instance's clients

clock
Answer the instance's clock

flush
Reset all running schedules by brute force.

interrupt
Stop all running schedules by brute force.

isRunning
Ask the instance if it's on

resetClock
Answer the instance's clock

run
Turn the instance on

timers
Get the instance's timers

instance creation

default
EventScheduler instance

instance
EventScheduler instance