Product SiteDocumentation Site

12.2. Message Objects

A message object (see Section 5.1.7, “The Message Class”) is an intermediary between two objects that enables concurrent processing. All objects inherit the START method (see the Section 5.1.7, “The Message Class”) from the object class. To obtain a message object, an object sends a START message to the object to which the message object will convey a message. The message is an argument to the START message as in the following example:
a=p~start("REVERSE")
This line of code creates a message object, A, and sends it a start message. The message object then sends the REVERSE message to object P. Object P receives the message, performs any needed processing, and returns a result to message object A. Meanwhile the object that obtained message object A continues its processing. When message object A returns, it does not interrupt the object that obtained it. It waits until this object requests the information. Here is an example of using a message object to run methods concurrently.

Example 12.2. Message object usage

/* Example of using a message object */

object1 = .example~new
object2 = .example~new

a = object1~start("REPEAT",10,"Object 1 running")
b = object2~start("REPEAT",10,"Object 2 running")

say a~result
say b~result
say "Main ended."
exit

::class example
::method repeat
use arg reps,msg
do reps
  say msg
end
return "Repeated" msg"," reps "times."