Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Stop loading private headers in public ones
[simgrid.git] / doc / module-gras.doc
index af308c5..07f19ee 100644 (file)
@@ -10,6 +10,9 @@
        - \ref GRAS_msg: communications are message oriented. You have to
          describe all possible messages and their payload beforehand, and
          can then attach callbacks to the arrival of a given kind of message. 
+       - \ref GRAS_timer: this is how to program repetitive and delayed
+         tasks, not unlike cron(8) and at(1). This cannot be used to timeout
+         a function (like setitimer(2) or signal(2) games could do).
      - <b>Virtualization</b>: Running both on top of the simulator and on
        top of real platforms, and portability support.
        - \ref GRAS_globals: The use of globals is forbidden since the
     nothing, isn't it?
     
        - \ref GRAS_ex_ping 
+       - \ref GRAS_ex_timer
               
     @{ */     
        /** \defgroup GRAS_dd      Data description      */       
        /** \defgroup GRAS_sock    Sockets               */           
        /** \defgroup GRAS_msg     Messages              */               
+       /** \defgroup GRAS_timer   Timers                */               
         
        /** \defgroup GRAS_globals Globals               */ 
        /** \defgroup GRAS_cond    Conditional execution */ 
 
     \section GRAS_maingen_script Generating the main()s manually with
     
-    This is done by the gras_stub_generator script, which lives for now in
-    the examples/gras/ directory. Here is the calling syntax:
-    \verbatim gras_stub_generator <project_name> <deployment_file>\endverbatim
+    This is done by the gras_stub_generator program, which gets installed on
+    <tt>make install</tt> (the source resides in the tools/gras/ directory).
+    Here is the calling syntax: 
+    \verbatim gras_stub_generator <project_name> <deployment_file.xml>\endverbatim
     
     It parses the deployment file, searching for all the kind of processes
     you have in your project. It then generates the following C files:
-     - a file _<project_name>_<process_kind>.c for each process kind you
+     - a <tt>_<project_name>_<process_kind>.c</tt> file for each process kind you
        have\n
        They are used to launch your project in real life. They
        contain a main() in charge of initializing the GRAS infrastructure and
        launching your code afterward.
-     - a file _<project_name>_simulator.c.\n
+     - a <tt>_<project_name>_simulator.c</tt> file.\n
        This file is suited to the simulation mode. It contains a main()
        function initializing the simulator and launching your project within.
     
     example: \verbatim int client(int argc,char *argv[]);\endverbatim
     
     Unfortunately, all this is still partially documented. I guess I ought
-    to improve this situation somehow. In the meanwhile, check the script
-    source code, and the generated code, sorry.
-    
-    \warning All this is about the old description file from SimGrid2 and
-    should be updated to the new SimGrid3 format. We have to change both the
-    code and this documentation.
-    
+    to improve this situation somehow. In the meanwhile, check the generated 
+    code and maybe also the GRAS \ref GRAS_example, sorry. 
+        
     \section GRAS_maingen_make Integration within your Makefile 
     
     The easiest to set it up is to add the following chunk at the end of
 \verbatim NAME=your_project_name
  PROCESSES=list of processes type in your project
 
- $(foreach proc, $(PROCESSES), _$(NAME)_$(proc).c) _$(NAME)_simulator.c: $(NAME).c $(NAME)_deployment.txt
-        path/to/gras_stub_generator $(NAME) $(NAME)_deployment.txt >/dev/null
+ $(foreach proc, $(PROCESSES), _$(NAME)_$(proc).c) _$(NAME)_simulator.c: $(NAME).c $(NAME)_deployment.xml
+        path/to/gras_stub_generator $(NAME) $(NAME)_deployment.xml >/dev/null
 \endverbatim
 
     Of course, your personal millage may vary. For the \ref GRAS_ex_ping, may read:
-\verbatim _ping_client.c _ping_server.c _ping_simulator.c: ping.c ping_deployment.txt 
-        $(srcdir)/../gras_stub_generator ping ping_deployment.txt >/dev/null
-\endverbatim   
+\verbatim _ping_client.c _ping_server.c _ping_simulator.c: ping.c ping_deployment.xml 
+        $(top_srcdir)/tools/gras/gras_stub_generator ping ping_deployment.xml >/dev/null
+\endverbatim
 
      */
 
     
     \skip client
     \until end_of_client
+  */
+
+/** \page GRAS_ex_timer Some timer games
+
+    <center>[\ref GRAS_API]</center>
+
+    This example fools around with the GRAS timers (\ref GRAS_timer). It is
+    mainly a regression test, since it uses almost all timer features.
     
+    The main program registers a repetititive task and a delayed one, and
+    then loops until the <tt>still_to_do</tt> variables of its globals reach
+    0. The delayed task set it to 5, and the repetititive one decrease it
+    each time. Here is an example of output:
+\verbatim Initialize GRAS
+ Initialize XBT
+ [1108335471] Programming the repetitive_action with a frequency of 1.000000 sec
+ [1108335471] Programming the delayed_action for after 2.000000 sec
+ [1108335471] Have a rest
+ [1108335472] Canceling the delayed_action.
+ [1108335472] Re-programming the delayed_action for after 2.000000 sec
+ [1108335472] Repetitive_action has nothing to do yet
+ [1108335473] Repetitive_action has nothing to do yet
+ [1108335473] delayed_action setting globals->still_to_do to 5
+ [1108335474] repetitive_action decrementing globals->still_to_do. New value: 4
+ [1108335475] repetitive_action decrementing globals->still_to_do. New value: 3
+ [1108335476] repetitive_action decrementing globals->still_to_do. New value: 2
+ [1108335477] repetitive_action decrementing globals->still_to_do. New value: 1
+ [1108335478] repetitive_action decrementing globals->still_to_do. New value: 0
+ Exiting GRAS\endverbatim
 
-  */
+    Source code:
+     - \ref GRAS_ex_timer_decl
+     - \ref GRAS_ex_timer_delay
+     - \ref GRAS_ex_timer_repeat
+     - \ref GRAS_ex_timer_main
 
+    \dontinclude timer.c
+    
+    \section GRAS_ex_timer_decl   1. Declarations and headers
+    \skip include
+    \until my_globals
+    
+    \section GRAS_ex_timer_delay  2. Source code of the delayed action
+    \skip repetitive_action
+    \until end_of_repetitive_action
+    
+    \section GRAS_ex_timer_repeat 3. Source code of the repetitive action
+    \skip delayed_action
+    \until end_of_delayed_action
+    
+    \section GRAS_ex_timer_main   4. Source code of main function
+    \skip client
+    \until end_of_client
+*/