]> git.cworth.org Git - apitrace/blob - common/os_workqueue.hpp
Implement missing threading primitive for Windows.
[apitrace] / common / os_workqueue.hpp
1 #ifndef _OS_WORKQUEUE_HPP_
2 #define _OS_WORKQUEUE_HPP_
3
4 #include <queue>
5
6 #include "os_thread.hpp"
7
8 namespace os {
9
10
11 class WorkQueue;
12
13 class WorkQueueWork {
14 protected:
15     friend class WorkQueue;
16
17 public:
18     virtual void run(void) = 0;
19     virtual ~WorkQueueWork(void) { }
20 };
21
22 class WorkQueue {
23     std::queue<WorkQueueWork *> work_queue;
24
25     bool busy;
26     bool exit_workqueue;
27     os::condition_variable wake_cond;
28     os::condition_variable complete_cond;
29
30     os::mutex mutex;
31
32     os::thread thread;
33
34     void wake_up_thread(void);
35     int run_tasks(void);
36 public:
37     void thread_entry(void);
38     void queue_work(WorkQueueWork *work);
39     void flush(void);
40     void destroy(void);
41
42     WorkQueue(void);
43     ~WorkQueue();
44 };
45
46 }
47
48 #endif