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 std::cout << __COUT_HDR_FL__ <<
"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 std::cout << __COUT_HDR_FL__ <<
"ERROR: Can't submit WorkLoop job for " << cWorkLoopName_ << std::endl;
61 workLoop_->activate();
63 catch (xcept::Exception & e)
65 std::cout << __COUT_HDR_FL__ <<
"ERROR: Can't activate WorkLoop job for " << cWorkLoopName_
66 <<
" Very likely because the name " << cWorkLoopName_ <<
" is not unique!" << std::endl;
72 bool WorkLoop::stopWorkLoop()
75 continueWorkLoop_ =
false;
87 catch (xcept::Exception & e)
89 std::cout << __COUT_HDR_FL__ <<
"WARNING: Can't cancel WorkLoop job for " << cWorkLoopName_ <<
" because probably it has never been activated!"<< std::endl;
94 workLoop_->remove(job_);
96 catch (xcept::Exception & e)
102 std::cout << __COUT_HDR_FL__ <<
"WARNING: Can't remove request WorkLoop: " << cWorkLoopName_ << std::endl;
109 const std::string& WorkLoop::getWorkLoopName(
void)
111 return cWorkLoopName_;