19 #include <condition_variable> 132 should_run_.store(
false);
141 bool started = startWorkerThread();
152 is_shutdown &= stopWorkerThread();
168 std::unique_lock <std::mutex> lck(this->mtx_);
169 if (runnable_thread_.joinable()) {
179 std::unique_lock <std::mutex> lck(this->mtx_);
180 if (runnable_thread_.joinable()) {
181 cv_.wait_for(lck, millis);
189 if (runnable_thread_.joinable()) {
190 runnable_thread_.join();
200 ? std::string(
"True") : std::string(
"False"));
210 if(!runnable_thread_.joinable()) {
211 should_run_.store(
true);
223 if(should_run_.load()) {
224 should_run_.store(
false);
238 std::unique_lock <std::mutex> lck(this->mtx_);
239 this->cv_.notify_all();
245 virtual void work() = 0;
249 std::atomic<bool> should_run_{};
250 std::condition_variable
cv_;
virtual ~Service()=default
std::condition_variable cv_
std::string getStatusString() override
virtual bool startWorkerThread()
void waitForShutdown(std::chrono::milliseconds millis)
void setState(ServiceState new_state)
virtual void setValue(const T &v)
ObservableObject< ServiceState > state_
virtual bool stopWorkerThread()
virtual std::string getStatusString()
std::thread runnable_thread_
static std::map< ServiceState, std::string > SERVICE_STATE_NAME_MAP