add_hook (hook_sym, function_sym)
This function sets up a hook, which is a function that is called when a particular event takes place. The arguments to the function identified by the function_sym are determined by the particular event. A hook function must be defined with the correct number of arguments, or else with optional or variable length arguments. The currently available hooks and the respective events that trigger their functions are as follows:
| trace_symbol_hook |
| trace_entry_hook |
| trace_exit_hook |
| breakpoint_hook |
One common use of this function is to add the internal taskstarted or taskdied functions, with the taskstarted_hook or taskdied_hook. Whenever a task that is registered with nserve starts or dies, nserve sends a message to all Gamma applications running IPC. Any of these applications that has added the taskstarted_hook or taskdied_hook then runs their corresponding function_sym function.
This example program requires qserve and nserve to be running. It gives the output shown below:
#!/usr/cogent/bin/gamma
//Program: ex_addrunhooks.g
function main ()
{
init_ipc ("x","x");
add_hook (#taskstarted_hook, #hook_started);
add_hook (#taskdied_hook, #hook_died);
run_hooks (#taskstarted_hook, "testing start");
run_hooks (#taskdied_hook, "testing died");
while(t)
next_event();
}
function hook_started (!a?...=nil)
{
princ ("Hooked task started: ", a, "\n");
}
function hook_died (!a?...=nil)
{
princ ("Hooked task died: ", a, "\n");
}Output from ex_addrunhooks.g at startup:
Hooked task started: (testing start) Hooked task died: (testing died)
Starting a new Gamma task named mytask...
Gamma> init_ipc("mytask", "myqueue");
t
Gamma> ...elicits this output from ex_addrunhooks.g:
Hooked task started: (mytask default myqueue 0 0 1874 0)
Checking process status with nsnames:
[home/robert]$ nsnames Name Domain Queue NID PID mytask default myqueue 0 1874 x default x 0 1873
Terminating mytask elicits this output from ex_addrunhooks.g:
Hooked task died: (mytask default myqueue 0 0 1874 0)
Copyright © 1995-2006 by Cogent Real-Time Systems, Inc. All rights reserved.