1 #include "otsdaq-core/WorkLoopManager/WorkLoop.h"
2 #include "otsdaq-core/MessageFacility/MessageFacility.h"
3 #include "otsdaq-core/Macros/CoutHeaderMacros.h"
5 #include <toolbox/task/WorkLoopFactory.h>
14 WorkLoop::WorkLoop(std::string name)
15 : continueWorkLoop_(false)
16 , cWorkLoopName_ (name)
17 , cWorkLoopType_ (
"waiting")
19 , job_ (toolbox::task::bind(this, &
WorkLoop::workLoopThread, cWorkLoopName_))
24 WorkLoop::~WorkLoop(
void)
26 mf::LogDebug(
"WorkLoop") <<
"Destroying WorkLoop: " << cWorkLoopName_ << std::endl;
28 toolbox::task::getWorkLoopFactory()->removeWorkLoop(cWorkLoopName_, cWorkLoopType_);
29 mf::LogDebug(
"WorkLoop") <<
"Destroyed WorkLoop: " << cWorkLoopName_ << std::endl;
33 void WorkLoop::startWorkLoop(
void)
36 continueWorkLoop_ =
true;
39 workLoop_ = toolbox::task::getWorkLoopFactory()->getWorkLoop(cWorkLoopName_, cWorkLoopType_);
41 catch (xcept::Exception & e)
43 __COUT__ <<
"ERROR: Can't create WorkLoop job for " << cWorkLoopName_ << std::endl;
47 if(workLoop_->isActive())
return;
51 workLoop_->submit(job_);
53 catch (xcept::Exception & e)
55 __COUT__ <<
"ERROR: Can't submit WorkLoop job for " << cWorkLoopName_ << std::endl;
61 workLoop_->activate();
63 catch (xcept::Exception & e)
65 __COUT__ <<
"ERROR: Can't activate WorkLoop job for " << cWorkLoopName_
66 <<
" Very likely because the name " << cWorkLoopName_ <<
" is not unique!" << std::endl;
72 bool WorkLoop::stopWorkLoop()
74 __COUT__ <<
"Stopping WorkLoop: " << cWorkLoopName_ << std::endl;
76 continueWorkLoop_ =
false;
79 __COUT__ <<
"MEASSAGE: WorkLoop " << cWorkLoopName_ <<
" was not created at all! This message will be commented in the future" << std::endl;
83 __COUT__ <<
"initially workLoop_->isActive() " << (workLoop_->isActive()?
"yes":
"no") << std::endl;
90 catch (xcept::Exception & e)
92 __COUT__ <<
"WARNING: Can't cancel WorkLoop job for " << cWorkLoopName_ <<
93 " because probably it has never been activated!" << std::endl;
95 __COUT__ <<
"workLoop_->isActive() " << (workLoop_->isActive()?
"yes":
"no") << std::endl;
101 workLoop_->remove(job_);
103 catch (xcept::Exception & e)
109 __COUT__ <<
"WARNING: Can't remove request WorkLoop: " << cWorkLoopName_ << std::endl;
110 __COUT__ <<
"workLoop_->isActive() " << (workLoop_->isActive()?
"yes":
"no") << std::endl;
113 __COUT__ <<
"Stopped WorkLoop: " << cWorkLoopName_ << std::endl;
114 __COUT__ <<
"workLoop_->isActive() " << (workLoop_->isActive()?
"yes":
"no") << std::endl;
119 const std::string& WorkLoop::getWorkLoopName(
void)
121 return cWorkLoopName_;
125 bool WorkLoop::isActive(
void)
127 return workLoop_->isActive() && continueWorkLoop_;