This function uses the Gamma send_async function to send executable code to the Controller. This sends an message asynchronously, which allows this function to continue without waiting for a reply from the Controller. This breaks a potential feedback loop, because the Controller also sends messages (start and stop) to the Monitor.
/*--------------------------------------------------------------------
* Function: send_message
* Returns: t or nil
* Description: Sends information messages for the Controller's text box.
* The text of the messages is stored in the file
* 'messages.txt'.
*------------------------------------------------------------------*/
function send_message(msg)
{
local tsk;
if ((tsk = locate_task("control", t)) != nil)
{
if(msg == "nsnames")
send_async(tsk, `show_names(text2));
else
send_async(tsk, `anygui_show_text(text, read_msg(@msg), 1));
close_task(tsk);
}
}
This started_died_hook function is run whenever a task starts or dies, and is used to update the Process Status display. The multiple-length optional argument (see Function Arguments in the Gamma manual) allows for multiple tasks starting and stopping.
/*--------------------------------------------------------------------
* Function: started_died_hook
* Returns: t or nil
* Description: Called whenever a task starts or dies, this function
* calls send_message() to change the process status display.
* Gets added to the Controller from within the
* program_startup() function.
*------------------------------------------------------------------*/
function started_died_hook(!a?...=nil)
{
send_message("nsnames");
}
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.