Number5
Visualisierung 2 Project - Florian Schober (0828151, f.schober@live.com), Andreas Walch (0926780, walch.andreas89@gmail.com)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TaskManager.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Camera.hpp"
4 
11 {
12  mutex m_mutex;
13  condition_variable m_cv;
14  bool m_signaled;
15 
16 public:
21  manual_reset_event(bool signaled = false);
22 
24  void signal();
26  void reset();
28  void wait();
29 };
30 
37 {
38  mutex m_mutex;
39  condition_variable m_cv;
40  uint m_signal;
41 
42 public:
47 
49  void signal();
51  void signalN(uint n);
53  void wait(uint nTimes = 1);
54 };
55 
61 {
62  concurrency::concurrent_queue<function<void()>> m_taskqueue;
63  vector<BOOL> m_threadKeepAlive;
65  vector<thread> m_threads;
66 
67 public:
79  ~TaskManager();
80 
85  template<typename T>
86  void schedule(T fnc)
87  {
88  m_taskqueue.push(fnc);
90  }
96  template<typename T, typename TEvent>
97  void schedule(T fnc, TEvent* event = nullptr)
98  {
99  m_taskqueue.push([fnc, event]
100  ()
101  {
102  fnc();
103 
104  if (event)
105  event->signal();
106  });
107 
109  }
110 
111 private:
112 
117  void worker(BOOL* keepAlive);
118 };
TaskManager(Application *app)
Definition: TaskManager.cpp:72
bool m_signaled
Wheter or not the event is currently signalled.
Definition: TaskManager.hpp:14
void reset()
Sets the event to unsignaled-mode.
Definition: TaskManager.cpp:18
uint m_signal
Wheter or not the event is currently signalled.
Definition: TaskManager.hpp:40
void signal()
Sets the event to signaled-mode.
Definition: TaskManager.cpp:8
condition_variable m_cv
A condition variable used for synchronization.
Definition: TaskManager.hpp:39
void schedule(T fnc)
Definition: TaskManager.hpp:86
vector< thread > m_threads
The thread object for all worker-threads.
Definition: TaskManager.hpp:65
manual_reset_event(bool signaled=false)
Definition: TaskManager.cpp:4
auto_reset_event m_threadHasTodo
An event that tells workers wheter or not there is a task.
Definition: TaskManager.hpp:64
condition_variable m_cv
A condition variable used for synchronization.
Definition: TaskManager.hpp:13
void schedule(T fnc, TEvent *event=nullptr)
Definition: TaskManager.hpp:97
void signal()
Sets the event to signaled-mode.
Definition: TaskManager.cpp:40
vector< BOOL > m_threadKeepAlive
A a bool for each working-thread that tells it wheter or not to stay alive.
Definition: TaskManager.hpp:63
void worker(BOOL *keepAlive)
Definition: TaskManager.cpp:99
void signalN(uint n)
Sets the event to signaled-mode (N-times, i.e. to wake up N threads)
Definition: TaskManager.cpp:50
mutex m_mutex
A mutex used for synchronization.
Definition: TaskManager.hpp:38
void wait(uint nTimes=1)
Wait (block) until the event is set to signaled-mode.
Definition: TaskManager.cpp:61
concurrency::concurrent_queue< function< void()> > m_taskqueue
A queue of tasks that needs to be executed.
Definition: TaskManager.hpp:62
mutex m_mutex
A mutex used for synchronization.
Definition: TaskManager.hpp:12
void wait()
Wait (block) until the event is set to signaled-mode.
Definition: TaskManager.cpp:25