Diag-Client-Lib
Public Member Functions | Private Attributes | List of all members
utility::executor::Executor< ExecutorHandler > Class Template Reference

#include <executor.h>

Public Member Functions

 Executor ()
 
 ~Executor ()
 
void AddExecute (ExecutorHandler executor_handler)
 

Private Attributes

std::queue< ExecutorHandler > queue_
 
std::mutex mutex_lock_
 
std::mutex exit_mutex_lock_
 
std::thread thread_
 
std::condition_variable cond_var_
 
std::atomic< bool > exit_request_
 
std::atomic< bool > running_
 

Detailed Description

template<typename ExecutorHandler>
class utility::executor::Executor< ExecutorHandler >

Definition at line 22 of file executor.h.

Constructor & Destructor Documentation

◆ Executor()

template<typename ExecutorHandler >
utility::executor::Executor< ExecutorHandler >::Executor ( )
inline

Definition at line 25 of file executor.h.

25  : exit_request_{false}, running_{false} {
26  thread_ = std::thread([&]() {
27  std::unique_lock<std::mutex> exit_lck(exit_mutex_lock_);
28  while (!exit_request_.load()) {
29  if (!running_.load()) { cond_var_.wait(exit_lck); }
30  if (running_) {
31  std::unique_lock<std::mutex> lck(mutex_lock_);
32  while (!queue_.empty()) {
33  auto func = queue_.front();
34  lck.unlock();
35  func();
36  lck.lock();
37  queue_.pop();
38  }
39  running_.store(false);
40  }
41  }
42  });
43  }
std::queue< ExecutorHandler > queue_
Definition: executor.h:63
std::atomic< bool > exit_request_
Definition: executor.h:73
std::atomic< bool > running_
Definition: executor.h:75
std::condition_variable cond_var_
Definition: executor.h:71
std::mutex exit_mutex_lock_
Definition: executor.h:67

References utility::executor::Executor< ExecutorHandler >::cond_var_, utility::executor::Executor< ExecutorHandler >::exit_mutex_lock_, utility::executor::Executor< ExecutorHandler >::exit_request_, utility::executor::Executor< ExecutorHandler >::mutex_lock_, utility::executor::Executor< ExecutorHandler >::queue_, utility::executor::Executor< ExecutorHandler >::running_, and utility::executor::Executor< ExecutorHandler >::thread_.

◆ ~Executor()

template<typename ExecutorHandler >
utility::executor::Executor< ExecutorHandler >::~Executor ( )
inline

Member Function Documentation

◆ AddExecute()

template<typename ExecutorHandler >
void utility::executor::Executor< ExecutorHandler >::AddExecute ( ExecutorHandler  executor_handler)
inline

Definition at line 54 of file executor.h.

54  {
55  std::unique_lock<std::mutex> lck(mutex_lock_);
56  queue_.push(std::move(executor_handler));
57  running_.store(true);
58  cond_var_.notify_one();
59  }

References utility::executor::Executor< ExecutorHandler >::cond_var_, utility::executor::Executor< ExecutorHandler >::mutex_lock_, utility::executor::Executor< ExecutorHandler >::queue_, and utility::executor::Executor< ExecutorHandler >::running_.

Member Data Documentation

◆ cond_var_

template<typename ExecutorHandler >
std::condition_variable utility::executor::Executor< ExecutorHandler >::cond_var_
private

◆ exit_mutex_lock_

template<typename ExecutorHandler >
std::mutex utility::executor::Executor< ExecutorHandler >::exit_mutex_lock_
private

Definition at line 67 of file executor.h.

Referenced by utility::executor::Executor< ExecutorHandler >::Executor().

◆ exit_request_

template<typename ExecutorHandler >
std::atomic<bool> utility::executor::Executor< ExecutorHandler >::exit_request_
private

◆ mutex_lock_

template<typename ExecutorHandler >
std::mutex utility::executor::Executor< ExecutorHandler >::mutex_lock_
private

◆ queue_

template<typename ExecutorHandler >
std::queue<ExecutorHandler> utility::executor::Executor< ExecutorHandler >::queue_
private

◆ running_

template<typename ExecutorHandler >
std::atomic<bool> utility::executor::Executor< ExecutorHandler >::running_
private

◆ thread_

template<typename ExecutorHandler >
std::thread utility::executor::Executor< ExecutorHandler >::thread_
private

The documentation for this class was generated from the following file: