X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a379d5f99cd15cf485f80ea5ec45e884d16a6bb8..80aa60c52bb2ab930c3eb28b1417726717caf847:/include/simgrid/s4u/actor.hpp diff --git a/include/simgrid/s4u/actor.hpp b/include/simgrid/s4u/actor.hpp index fbb3112fd0..a07c2bd1d0 100644 --- a/include/simgrid/s4u/actor.hpp +++ b/include/simgrid/s4u/actor.hpp @@ -14,10 +14,6 @@ namespace simgrid { namespace s4u { -/** @defgroup s4u_actor Actors: simulation agents - * @addtogroup S4U_API - */ - /** @addtogroup s4u_actor * * @tableofcontents @@ -31,37 +27,90 @@ namespace s4u { * An actor is located on a (simulated) host, but it can interact * with the whole simulated platform. * + * The s4u::Actor API is strongly inspired from the C++11 threads. + * The documentation + * of this standard may help to understand the philosophy of the S4U + * Actors. + * * (back to the @ref s4u_api "S4U documentation") * - * @section s4u_actor_def Defining an Actor + * @section s4u_actor_def Defining the skeleton of an Actor * - * The code of an actor (ie, the code that this actor will run when starting) the () operator. - * In this code, your actor can use the functions of the simgrid::s4u::this_actor namespace to interact with the world. + * %As in the C++11 + * standard, you can declare the code of your actor either as a + * pure function or as an object. It is very simple with functions: * - * For example, a Worker actor should be declared as follows: - * - * \code{.cpp} + * @code{.cpp} + * // Declare the code of your worker + * void worker() { + * printf("Hello s4u"); + * simgrid::s4u::this_actor::execute(5*1024*1024); // Get the worker executing a task of 5 MFlops + * }; + * + * // From your main or from another actor, create your actor on the host Jupiter + * new Actor("worker", simgrid::s4u::Host::by_name("Jupiter"), worker); + * @endcode + * + * But some people prefer to encapsulate their actors in classes and + * objects to save the actor state in a cleanly dedicated location. + * The syntax is slightly more complicated, but not much. + * + * @code{.cpp} * #include "s4u/actor.hpp" * + * // Declare the class representing your actors * class Worker { + * public: * void operator()() { // Two pairs of () because this defines the method called () * printf("Hello s4u"); * simgrid::s4u::this_actor::execute(5*1024*1024); // Get the worker executing a task of 5 MFlops * } * }; - * \endcode * - * @section s4u_actor_new Creating a new instance of your Actor + * // From your main or from another actor, create your actor. Note the () after Worker + * new Actor("worker", simgrid::s4u::Host::by_name("Jupiter"), Worker()); + * @endcode + * + * @section s4u_actor_flesh Fleshing your actor * - * // Then later in your main() function or so: - * ... - * new Actor("worker", host, Worker()); - * ... + * The body of your actor can use the functions of the + * simgrid::s4u::this_actor namespace to interact with the world. + * This namespace contains the methods to start new activities + * (executions, communications, etc), and to get informations about + * the currently running thread (its location, etc). + * + * Please refer to the @link simgrid::s4u::this_actor full API @endlink. * - * You can start your actors with simple @c new, for example from the @c main function, - * but this is usually considered as a bad habit as it makes it harder to test your application - * in differing settings. Instead, you are advised to use an XML deployment file using - * s4u::Engine::loadDeployment() to start your actors. + * + * @section s4u_actor_deploy Using a deployment file + * + * @warning This is currently not working with S4U. Sorry about that. + * + * The best practice is to use an external deployment file as + * follows, because it makes it easier to test your application in + * differing settings. Load this file with + * s4u::Engine::loadDeployment() before the simulation starts. + * Refer to the @ref deployment section for more information. + * + * @code{.xml} + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *