28 #include <condition_variable> 44 std::queue<std::function<void()>> m_queue;
49 std::vector<std::thread> m_threads;
59 std::condition_variable m_condition;
69 unsigned int m_numThreads;
89 template<
class T,
class... Args>
90 std::future<
typename std::result_of<T(Args...)>::type>
enqueue(T&& t, Args&&... args)
92 using pkgdTask = std::packaged_task<
typename std::result_of<T(Args...)>::type()>;
94 std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
95 auto result = task->get_future();
98 m_queue.emplace([task]() { (*task)(); });
101 m_condition.notify_one();
109 unsigned int getNumOfThreads();
116 void threadFunction();
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition: Audaspace.h:116
#define AUD_API
Used for exporting symbols in the shared library.
Definition: Audaspace.h:93
This represents pool of threads.
Definition: ThreadPool.h:38
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition: Audaspace.h:119
std::future< typename std::result_of< T(Args...)>::type > enqueue(T &&t, Args &&... args)
Enqueues a new task for the threads to realize.
Definition: ThreadPool.h:90
The main header file of the library defining the namespace and basic data types.