X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eed8daedf7c2d58e0db96826205f138cedb9cc5a..a3570625c9460617ccad1803b50bc4f1793b6376:/include/gras/process.h diff --git a/include/gras/process.h b/include/gras/process.h index 57f8b4c728..5f4f2cac8d 100644 --- a/include/gras/process.h +++ b/include/gras/process.h @@ -10,38 +10,22 @@ #ifndef GRAS_PROCESS_H #define GRAS_PROCESS_H -#include "xbt/misc.h" /* SG_BEGIN_DECL */ +#include "xbt/misc.h" /* SG_BEGIN_DECL */ +#include "xbt/dict.h" SG_BEGIN_DECL() -/* ************************************************************************** - * Initializing the processes - * **************************************************************************/ -/** - * gras_process_init: - * - * Perform the various intialisations needed by gras. Each process must run it - */ -void gras_process_init(void); + void gras_agent_spawn(const char *name, void *data, xbt_main_func_t code, + int argc, char *argv[], xbt_dict_t properties); -/** - * gras_process_exit: - * - * Frees the memory allocated by gras. Processes should run it - */ -void gras_process_exit(void); /****************************************************************************/ /* Manipulating User Data */ /****************************************************************************/ /** \addtogroup GRAS_globals - * \brief Handling global variables so that it works on simulator (Virtualization). + * \brief Handling global variables so that it works on simulator. * - *
Top [\ref index]::[\ref GRAS_API] - *
Prev [\ref GRAS_virtu] - *
Next [\ref GRAS_emul]
- * * In GRAS, using globals is forbidden since the "processes" will * sometimes run as a thread inside the same process (namely, in * simulation mode). So, you have to put all globals in a structure, and @@ -49,7 +33,11 @@ void gras_process_exit(void); * * Use the \ref gras_userdata_new macro to create a new user data (or malloc it * and use \ref gras_userdata_set yourself), and \ref gras_userdata_get to - * retrive a reference to it. + * retrieve a reference to it. + * + * + * For more info on this, you may want to check the relevant lesson of the GRAS tutorial: + * \ref GRAS_tut_tour_globals */ /* @{ */ @@ -57,19 +45,25 @@ void gras_process_exit(void); * \brief Get the data associated with the current process. * \ingroup GRAS_globals */ -void *gras_userdata_get(void); +XBT_PUBLIC(void *) gras_userdata_get(void); /** * \brief Set the data associated with the current process. * \ingroup GRAS_globals */ -void gras_userdata_set(void *ud); +XBT_PUBLIC(void *) gras_userdata_set(void *ud); -/** \brief Malloc and set the data associated with the current process. */ -#define gras_userdata_new(type) (gras_userdata_set(xbt_new0(type,1)),gras_userdata_get()) +/** \brief Malloc and set the data associated with the current process. + * + * @warning gras_userdata_new() expects the pointed type, not the + * pointer type. We know it'a a bit troublesome, but it seems like + * the only solution since this macro has to compute the size to + * malloc and should thus know the pointed type. + * + * You'll find an example in the tutorial: \ref GRAS_tut_tour_globals + */ +#define gras_userdata_new(type) ((type*)gras_userdata_set(xbt_new0(type,1))) /* @} */ SG_END_DECL() - #endif /* GRAS_PROCESS_H */ -