libtasks Documentation  1.6
executor.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-2014 ADTECH GmbH
3  * Licensed under MIT (https://github.com/adtechlabs/libtasks/blob/master/COPYING)
4  *
5  * Author: Andreas Pohl
6  */
7 
8 #ifndef _TASKS_EXECUTOR_H_
9 #define _TASKS_EXECUTOR_H_
10 
11 #include <tasks/exec_task.h>
12 #include <tasks/logging.h>
13 
14 #include <thread>
15 #include <mutex>
16 #include <condition_variable>
17 #include <atomic>
18 #include <memory>
19 
20 namespace tasks {
21 
22 class executor {
23  friend class test_exec;
24 
25  public:
26  executor();
27 
28  virtual ~executor() {
29  terminate();
30  m_thread->join();
31  tdbg("terminated" << std::endl);
32  }
33 
34  inline bool busy() const { return m_busy; }
35 
36  inline void set_busy() { m_busy = true; }
37 
38  inline void add_task(exec_task* t) {
39  tdbg("add_task " << t << std::endl);
40  {
41  std::lock_guard<std::mutex> lock(m_mutex);
42  m_task = t;
43  }
44  m_cond.notify_one();
45  }
46 
47  inline void terminate() {
48  tdbg("terminating" << std::endl);
49  m_term = true;
50  m_cond.notify_one();
51  }
52 
53  inline bool terminated() const { return m_term; }
54 
55  static void set_timeout(uint32_t timeout) { m_timeout = timeout; }
56 
57  private:
58  std::atomic<bool> m_busy;
59  std::atomic<bool> m_term;
60  exec_task* m_task = nullptr;
61  std::mutex m_mutex;
62  std::condition_variable m_cond;
63  static uint32_t m_timeout;
64  std::unique_ptr<std::thread> m_thread;
65 
66  void run();
67 };
68 
69 } // tasks
70 
71 #endif // _TASKS_EXECUTOR_H_
void add_task(exec_task *t)
Definition: executor.h:38
std::atomic< bool > m_term
Definition: executor.h:59
std::unique_ptr< std::thread > m_thread
Definition: executor.h:64
std::mutex m_mutex
Definition: executor.h:61
std::atomic< bool > m_busy
Definition: executor.h:58
#define tdbg(m)
Definition: logging.h:54
bool busy() const
Definition: executor.h:34
static void set_timeout(uint32_t timeout)
Definition: executor.h:55
bool terminated() const
Definition: executor.h:53
exec_task * m_task
Definition: executor.h:60
std::condition_variable m_cond
Definition: executor.h:62
virtual ~executor()
Definition: executor.h:28
static uint32_t m_timeout
Definition: executor.h:63
void set_busy()
Definition: executor.h:36
void terminate()
Definition: executor.h:47