Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fox broken CMakeLists.txt
[simgrid.git] / teshsuite / s4u / actor / actor.cpp
1 /* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "simgrid/s4u.hpp"
7
8 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
9
10 static void worker()
11 {
12   simgrid::s4u::this_actor::sleep_for(.5);
13   XBT_INFO("Worker started (PID:%lu, PPID:%lu)", simgrid::s4u::this_actor::pid(), simgrid::s4u::this_actor::ppid());
14   while (1) {
15     XBT_INFO("Plop i am %ssuspended", simgrid::s4u::this_actor::isSuspended() ? "" : "not ");
16     simgrid::s4u::this_actor::sleep_for(1);
17   }
18   XBT_INFO("I'm done. See you!");
19 }
20
21 static void master()
22 {
23   simgrid::s4u::this_actor::sleep_for(1);
24   std::vector<simgrid::s4u::ActorPtr>* actor_list = new std::vector<simgrid::s4u::ActorPtr>();
25   simgrid::s4u::this_actor::host()->actorList(actor_list);
26
27   for (auto actor : *actor_list) {
28     XBT_INFO("Actor (pid=%lu, ppid=%lu, name=%s)", actor->pid(), actor->ppid(), actor->name().c_str());
29     if (simgrid::s4u::this_actor::pid() != actor->pid())
30       actor->kill();
31   }
32
33   simgrid::s4u::ActorPtr actor =
34       simgrid::s4u::Actor::createActor("worker from master", simgrid::s4u::this_actor::host(), worker);
35   simgrid::s4u::this_actor::sleep_for(2);
36
37   XBT_INFO("Suspend Actor (pid=%lu)", actor->pid());
38   actor->suspend();
39
40   XBT_INFO("Actor (pid=%lu) is %ssuspended", actor->pid(), actor->isSuspended() ? "" : "not ");
41   simgrid::s4u::this_actor::sleep_for(2);
42
43   XBT_INFO("Resume Actor (pid=%lu)", actor->pid());
44   actor->resume();
45
46   XBT_INFO("Actor (pid=%lu) is %ssuspended", actor->pid(), actor->isSuspended() ? "" : "not ");
47   simgrid::s4u::this_actor::sleep_for(2);
48   actor->kill();
49
50   delete actor_list;
51   XBT_INFO("Goodbye now!");
52 }
53
54 int main(int argc, char* argv[])
55 {
56   simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv);
57   e->loadPlatform(argv[1]);
58
59   simgrid::s4u::Actor::createActor("master", simgrid::s4u::Host::by_name("Tremblay"), master);
60   simgrid::s4u::Actor::createActor("worker", simgrid::s4u::Host::by_name("Tremblay"), worker);
61
62   e->run();
63   XBT_INFO("Simulation time %g", e->getClock());
64
65   return 0;
66 }