Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into fix/execute_benched
[simgrid.git] / examples / s4u / actor-kill / s4u-actor-kill.cpp
index e6a77aa..fe726b4 100644 (file)
@@ -7,8 +7,15 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor_kill, "Messages specific for this s4u example");
 
+static int on_exit(void*, void*)
+{
+  XBT_INFO("I have been killed!");
+  return 0;
+}
+
 static void victim()
 {
+  simgrid::s4u::this_actor::onExit(on_exit, nullptr);
   XBT_INFO("Hello!");
   XBT_INFO("Suspending myself");
   simgrid::s4u::this_actor::suspend(); /* - Start by suspending itself */
@@ -24,11 +31,16 @@ static void killer()
       simgrid::s4u::Actor::createActor("victim", simgrid::s4u::Host::by_name("Fafard"), victim);
   simgrid::s4u::this_actor::sleep_for(10); /* - Wait for 10 seconds */
 
-  XBT_INFO("Resume process"); /* - Resume it from its suspended state */
+  XBT_INFO("Resume the victim"); /* - Resume it from its suspended state */
   poor_victim->resume();
+  simgrid::s4u::this_actor::sleep_for(2);
 
-  XBT_INFO("Kill process"); /* - and then kill it */
+  XBT_INFO("Kill the victim"); /* - and then kill it */
   poor_victim->kill();
+  simgrid::s4u::this_actor::sleep_for(1);
+
+  XBT_INFO("Killing everybody but myself");
+  simgrid::s4u::Actor::killAll();
 
   XBT_INFO("OK, goodbye now. I commit a suicide.");
   simgrid::s4u::this_actor::kill();
@@ -38,17 +50,20 @@ static void killer()
 
 int main(int argc, char* argv[])
 {
-  simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, 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]);
 
-  e->loadPlatform(argv[1]); /* - Load the platform description */
+  e.loadPlatform(argv[1]); /* - Load the platform description */
   /* - Create and deploy killer process, that will create the victim process  */
   simgrid::s4u::Actor::createActor("killer", simgrid::s4u::Host::by_name("Tremblay"), killer);
+  simgrid::s4u::Actor::createActor("Alice", simgrid::s4u::Host::by_name("Jupiter"), victim);
+  simgrid::s4u::Actor::createActor("Bob", simgrid::s4u::Host::by_name("Ginette"), victim);
+  simgrid::s4u::Actor::createActor("Carol", simgrid::s4u::Host::by_name("Bourassa"), victim);
+  simgrid::s4u::Actor::createActor("Dave", simgrid::s4u::Host::by_name("Boivin"), victim);
 
-  e->run(); /* - Run the simulation */
+  e.run(); /* - Run the simulation */
 
-  XBT_INFO("Simulation time %g", e->getClock());
+  XBT_INFO("Simulation time %g", e.getClock());
 
-  delete e;
   return 0;
 }