#ifndef GB_GBTHREADQUEUE_H #define GB_GBTHREADQUEUE_H #include <queue> #include <pthread.h> #include <atomic> typedef void (*queue_func_t)(void *item); class GbThreadQueue { public: GbThreadQueue(); ~GbThreadQueue(); bool initialize(queue_func_t processFunc, const char *threadName); void finalize(); // we are not responsible for cleaning up memory used by item void addItem(void *item); bool isEmpty(); private: static void* thread_queue_function(void *args); std::queue<void*> m_queue; pthread_mutex_t m_queueMtx; pthread_cond_t m_queueCondNotEmpty; pthread_t m_thread; queue_func_t m_func; std::atomic<bool> m_stop; bool m_started; }; #endif //GB_GBTHREADQUEUE_H