#pragma once #include "fastlock.h" #include #include #include #include #include #include #include class AsyncWorkQueue { struct WorkItem { WorkItem(std::function &&fnAsync) : fnAsync(std::move(fnAsync)) {} WorkItem(WorkItem&&) = default; std::function fnAsync; }; std::vector m_vecthreads; std::vector m_vecpthreadVars; std::deque m_workqueue; std::mutex m_mutex; std::condition_variable m_cvWakeup; std::atomic m_fQuitting { false }; void WorkerThreadMain(); public: AsyncWorkQueue(int nthreads); ~AsyncWorkQueue(); void AddWorkFunction(std::function &&fnAsync, bool fHiPri = false); bool removeClientAsyncWrites(struct client *c); void shutdown(); void abandonThreads(); };