APLX Help : Multi-tasking support : Signal events
|
|
Signal events |
|
The main method of communication between child and parent tasks is through explicit 'signal' events. This mechanism allows the child task to send a message to the parent, and vice versa. This works as follows:
In both cases, the Signal method optionally takes an
argument, which is any APL array (or an APLX overlay created using For example, suppose a child task is being used to carry out a time-consuming calculation. It starts by awaiting a signal to indicate that it should do the calculation, with the argument to the signal being the data to work on. When it has completed the calculation, it sends a signal back to the parent with the answer. The following sequence indicates how this might be done. First we need to do some setup. The parent task attaches a callback to the child task object: ∇CALCDONE [1] 'The answer is ' ⎕WARG ∇ ChildTask.onSignal←'CALCDONE' This will cause the Similarly, the child task attaches a callback to its System object, waiting for a signal to indicate that it should carry out the calculation: ∇DOCALC;RESULT;DATA [1] DATA←⎕WARG [2] RESULT←RUNMODEL DATA [3] '#' ⎕WI 'Signal' RESULT ∇ '#' ⎕WI 'onSignal' 'DOCALC' ⎕WE ¯1 This will cause the To carry out the calculation, the parent signals the child, and then processes
events (if it is not already running under ChildTask.Signal THEDATA ⎕WE ¯1 This triggers the child task to run the The answer is 42 In a real example, the parent task would be responding to other events (for example,
user-interface events), and there might be a number of child tasks each
simultaneously working on a different run of the model. If you have multiple child tasks running,
you can use the task ID ( There might also be a queue of signals waiting to be processed on either side. Note that there is a limit to the number of events which can be queued, typically around 200 events. If this maximum is exceeded, the oldest events are thrown away. |
|
APLX Help : Multi-tasking support : Signal events
|
Copyright © 1996-2010 MicroAPL Ltd