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.