class WorkQueueWork {
protected:
- friend class WorkQueue;
+ friend class WorkQueue;
public:
- virtual void run(void) = 0;
- virtual ~WorkQueueWork(void) { }
+ virtual void run(void) = 0;
+ virtual ~WorkQueueWork(void) { }
};
-extern "C"
-void *WorkQueue__entry_thunk(void *data);
-
class WorkQueue {
- pthread_t handle;
- std::queue<WorkQueueWork *> work_queue;
+ std::queue<WorkQueueWork *> work_queue;
+
+ bool busy;
+ bool exit_workqueue;
+ os::condition_variable wake_cond;
+ os::condition_variable complete_cond;
- bool busy;
- bool exit_workqueue;
- pthread_cond_t wake_cond;
- pthread_cond_t complete_cond;
+ os::mutex mutex;
- os::mutex lock;
+ os::thread thread;
- void wake_up_thread(void);
- void thread_entry(void);
- int run_tasks(void);
- friend void *WorkQueue__entry_thunk(void *data);
+ void wake_up_thread(void);
+ int run_tasks(void);
public:
- void queue_work(WorkQueueWork *work);
- void flush(void);
- void destroy(void);
+ void thread_entry(void);
+ void queue_work(WorkQueueWork *work);
+ void flush(void);
+ void destroy(void);
- WorkQueue(void);
- ~WorkQueue();
+ WorkQueue(void);
+ ~WorkQueue();
};
}