7#ifndef BOTAN_THREAD_POOL_H_
8#define BOTAN_THREAD_POOL_H_
10#include <botan/types.h>
20#include <condition_variable>
54 void queue_thunk(std::function<
void ()>);
56 template<
class F,
class... Args>
57 auto run(F&& f, Args&&... args) -> std::future<
typename std::result_of<F(Args...)>
::type>
59 typedef typename std::result_of<F(Args...)>
::type return_type;
61 auto future_work = std::bind(std::forward<F>(f), std::forward<Args>(args)...);
62 auto task = std::make_shared<std::packaged_task<return_type ()>>(future_work);
63 auto future_result = task->get_future();
64 queue_thunk([task]() { (*task)(); });
72 std::vector<std::thread> m_workers;
75 std::condition_variable m_more_tasks;
76 std::deque<std::function<void ()>> m_tasks;
Thread_Pool(Thread_Pool &&)=delete
size_t worker_count() const
Thread_Pool & operator=(Thread_Pool &&)=delete
auto run(F &&f, Args &&... args) -> std::future< typename std::result_of< F(Args...)>::type >
Thread_Pool & operator=(const Thread_Pool &)=delete
Thread_Pool(const Thread_Pool &)=delete