#ifndef CCTHREADPOOL_H #define CCTHREADPOOL_H #include #include #include #include #include #include #include "CCThread.h" class CCThreadPool { public: struct TaskPool { std::thread* thread; bool Running = false; }; public: CCThreadPool() = default; explicit CCThreadPool(int numThreads); void InitStart(int numThreads); template void AddTask(Func && func, Args&&... args); unsigned int GetThreadCount() const; unsigned int GetUnusedCount(); void SetThreadTimeout(unsigned int us); std::vector GetThreadUnusedID(); void Stop(); private: void worker(int ID); std::vector m_thread; TaskPool* T; std::vector> m_taskQueue; std::mutex m_mutex; bool m_running; unsigned int m_threadCount, m_thread_Time = 1000 * 1000; }; template inline void CCThreadPool::AddTask(Func && func, Args&&... args) { m_mutex.lock(); std::function FUNS = std::bind(std::forward(func), std::forward(args)...); if(FUNS) { for (int i = 0;i < m_threadCount;i++) { if(!m_thread[i]->Running) { m_taskQueue[i] = FUNS; m_thread[i]->Running = true; break; } } } //Threading::Sleep(1000 * 16); m_mutex.unlock(); } #endif //CCTHREADPOOL_H