X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fos_workqueue.hpp;h=047d3dbb4125967f72a83cad68015b30e180aea3;hb=c5cd3565d87b910bf5966d5e5c66ce722fcf25ae;hp=e6b77d4ca408c0c262589d5c9f025084e2cc6af8;hpb=8ecded8401d50cc3e8cc980243a016758550d950;p=apitrace diff --git a/common/os_workqueue.hpp b/common/os_workqueue.hpp index e6b77d4..047d3db 100644 --- a/common/os_workqueue.hpp +++ b/common/os_workqueue.hpp @@ -3,45 +3,44 @@ #include -namespace os -{ +#include "os_thread.hpp" + +namespace os { + class WorkQueue; 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 work_queue; + std::queue 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; - pthread_mutex_t 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(); }; }