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