X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eadbe829389f23151f79257824f3164d7801bbc7..d6aa3c0dc9e3022f3a430092266d3aecdbe55402:/examples/s4u/actor-exiting/s4u-actor-exiting.cpp diff --git a/examples/s4u/actor-exiting/s4u-actor-exiting.cpp b/examples/s4u/actor-exiting/s4u-actor-exiting.cpp index 9895d9f16d..dfd0f80aef 100644 --- a/examples/s4u/actor-exiting/s4u-actor-exiting.cpp +++ b/examples/s4u/actor-exiting/s4u-actor-exiting.cpp @@ -1,11 +1,11 @@ -/* Copyright (c) 2017-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2017-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /* There is two very different ways of being informed when an actor exits. * - * The this_actor::on_exit() function allows to register a function to be + * The this_actor::on_exit() function allows one to register a function to be * executed when this very actor exits. The registered function will run * when this actor terminates (either because its main function returns, or * because it's killed in any way). No simcall are allowed here: your actor @@ -15,11 +15,17 @@ * Usually, the functions registered in this_actor::on_exit() are in charge * of releasing any memory allocated by the actor during its execution. * - * The other way of getting informed when an actor dies is to connect a - * function in the Actor::on_destruction signal, that is shared between + * The other way of getting informed when an actor terminates is to connect a + * function in the Actor::on_termination signal, that is shared between * all actors. Callbacks to this signal are executed for each terminating * actors, no matter what. This is useful in many cases, in particular - * when developping SimGrid plugins. + * when developing SimGrid plugins. + * + * Finally, you can attach callbacks to the Actor::on_destruction signal. + * It is also shared between all actors, and gets fired when the actors + * are destroyed. A delay is possible between the termination of an actor + * (ie, when it terminates executing its code) and its destruction (ie, + * when it is not referenced anywhere in the simulation and can be collected). * * In both cases, you can stack more than one callback in the signal. * They will all be executed in the registration order. @@ -45,13 +51,16 @@ static void actor_b() int main(int argc, char* argv[]) { simgrid::s4u::Engine e(&argc, argv); - xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]); + xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s ../platforms/small_platform.xml\n", argv[0], argv[0]); e.load_platform(argv[1]); /* - Load the platform description */ - /* Register a callback in the Actor::on_destruction signal. It will be called for every terminated actors */ + /* Register a callback in the Actor::on_termination signal. It will be called for every terminated actors */ + simgrid::s4u::Actor::on_termination.connect( + [](simgrid::s4u::Actor const& actor) { XBT_INFO("Actor %s terminates now", actor.get_cname()); }); + /* Register a callback in the Actor::on_destruction signal. It will be called for every destructed actors */ simgrid::s4u::Actor::on_destruction.connect( - [](simgrid::s4u::Actor const& actor) { XBT_INFO("Actor %s stops now", actor.get_cname()); }); + [](simgrid::s4u::Actor const& actor) { XBT_INFO("Actor %s gets destroyed now", actor.get_cname()); }); /* Create some actors */ simgrid::s4u::Actor::create("A", simgrid::s4u::Host::by_name("Tremblay"), actor_a);