UsenetSearch/include/usenetsearch/ThreadPool.h

35 lines
749 B
C++

#pragma once
#include <atomic>
#include <functional>
#include <future>
#include <thread>
#include <unordered_map>
#include <vector>
namespace usenetsearch {
class ThreadPool
{
typedef std::unordered_map<std::thread::id, bool> ThreadStates;
typedef std::vector<std::unique_ptr<std::thread>> Threads;
size_t m_maxThreads{2};
std::atomic<bool> m_stopping{false};
Threads m_threads;
std::mutex m_threadsMutex;
std::shared_ptr<ThreadStates> m_threadStates;
std::mutex m_threadStatesMutex;
public:
ThreadPool();
ThreadPool(const ThreadPool&) = delete;
~ThreadPool();
void JoinThreads();
void MaxThreads(std::uint16_t max);
void Queue(std::function<void()> fn);
};
} // namespace usenetsearch