1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: Events_LongOp.cpp
4 // Created: 29 Jul 2014
5 // Author: Mikhail PONIKAROV
7 #include <Events_LongOp.h>
8 #include <Events_Loop.h>
10 /// senders of the long operation collected, ends the long operation event only
11 /// if all senders are stopped
12 std::map<void*, int> MY_SENDERS;
14 Events_LongOp::Events_LongOp(void* theSender)
15 : Events_Message(Events_LongOp::eventID(), theSender)
19 Events_LongOp::~Events_LongOp()
23 Events_ID Events_LongOp::eventID()
25 Events_Loop* aLoop = Events_Loop::loop();
26 return aLoop->eventByName("LongOperation");
29 void Events_LongOp::start(void* theSender)
31 bool toSend = MY_SENDERS.empty();
32 if (MY_SENDERS.find(theSender) == MY_SENDERS.end())
33 MY_SENDERS[theSender] = 1;
35 MY_SENDERS[theSender]++;
38 std::shared_ptr<Events_Message> aNewOne =
39 std::shared_ptr<Events_Message>(new Events_LongOp(theSender));
40 Events_Loop::loop()->send(aNewOne);
44 void Events_LongOp::end(void* theSender)
46 if (MY_SENDERS.find(theSender) != MY_SENDERS.end()) {
47 int aCount = MY_SENDERS[theSender];
49 MY_SENDERS.erase(theSender);
51 MY_SENDERS[theSender] = aCount - 1;
53 if (MY_SENDERS.empty()) {
54 std::shared_ptr<Events_Message> aNewOne =
55 std::shared_ptr<Events_Message>(new Events_LongOp(theSender));
56 Events_Loop::loop()->send(aNewOne);
60 bool Events_LongOp::isPerformed()
62 return !MY_SENDERS.empty();