\doxysection{utils\+::Thread\+Pool Class Reference}
\hypertarget{classutils_1_1ThreadPool}{}\label{classutils_1_1ThreadPool}\index{utils::ThreadPool@{utils::ThreadPool}}


{\ttfamily \#include $<$Thread\+Pool.\+hh$>$}



Collaboration diagram for utils\+::Thread\+Pool\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=172pt]{classutils_1_1ThreadPool__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool}} (std\+::size\+\_\+t threads=std\+::thread\+::hardware\+\_\+concurrency())
\item 
\mbox{\hyperlink{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}{\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool}} ()
\item 
{\footnotesize template$<$class F, class... Args$>$ }\\auto \mbox{\hyperlink{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}{enqueue}} (F \&\&f, Args \&\&... args) -\/$>$ std\+::future$<$ std\+::invoke\+\_\+result\+\_\+t$<$ F, Args... $>$ $>$
\end{DoxyCompactItemize}
\doxysubsubsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
std\+::vector$<$ std\+::thread $>$ \mbox{\hyperlink{classutils_1_1ThreadPool_a3113eec4fac2948b403a0d94c42a3732}{\+\_\+workers}}
\item 
std\+::queue$<$ std\+::function$<$ void()$>$ $>$ \mbox{\hyperlink{classutils_1_1ThreadPool_acbc332a452776263a9e6557131495aee}{\+\_\+tasks}}
\item 
std\+::mutex \mbox{\hyperlink{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291}{\+\_\+queue\+\_\+mutex}}
\item 
std\+::condition\+\_\+variable \mbox{\hyperlink{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748}{\+\_\+cv}}
\item 
bool \mbox{\hyperlink{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f}{\+\_\+stop}} \{false\}
\end{DoxyCompactItemize}


\doxysubsection{Constructor \& Destructor Documentation}
\Hypertarget{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}\index{utils::ThreadPool@{utils::ThreadPool}!ThreadPool@{ThreadPool}}
\index{ThreadPool@{ThreadPool}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{ThreadPool()}{ThreadPool()}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2} 
utils\+::\+Thread\+Pool\+::\+Thread\+Pool (\begin{DoxyParamCaption}\item[{std\+::size\+\_\+t}]{threads}{ = {\ttfamily std\+:\+:thread\+:\+:hardware\+\_\+concurrency()}}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}}



References \mbox{\hyperlink{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748}{\+\_\+cv}}, \mbox{\hyperlink{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291}{\+\_\+queue\+\_\+mutex}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f}{\+\_\+stop}}, \mbox{\hyperlink{classutils_1_1ThreadPool_acbc332a452776263a9e6557131495aee}{\+\_\+tasks}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a3113eec4fac2948b403a0d94c42a3732}{\+\_\+workers}}.

\Hypertarget{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}\index{utils::ThreadPool@{utils::ThreadPool}!````~ThreadPool@{\texorpdfstring{$\sim$}{\string~}ThreadPool}}
\index{````~ThreadPool@{\texorpdfstring{$\sim$}{\string~}ThreadPool}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\texorpdfstring{$\sim$}{\string~}ThreadPool()}{\string~ThreadPool()}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108} 
utils\+::\+Thread\+Pool\+::\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})}



References \mbox{\hyperlink{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748}{\+\_\+cv}}, \mbox{\hyperlink{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291}{\+\_\+queue\+\_\+mutex}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f}{\+\_\+stop}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a3113eec4fac2948b403a0d94c42a3732}{\+\_\+workers}}.



\doxysubsection{Member Function Documentation}
\Hypertarget{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}\index{utils::ThreadPool@{utils::ThreadPool}!enqueue@{enqueue}}
\index{enqueue@{enqueue}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{enqueue()}{enqueue()}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d} 
template$<$class F, class... Args$>$ \\
auto utils\+::\+Thread\+Pool\+::enqueue (\begin{DoxyParamCaption}\item[{F \&\&}]{f}{, }\item[{Args \&\&...}]{args}{}\end{DoxyParamCaption}) -\/$>$ std\+::future$<$std\+::invoke\+\_\+result\+\_\+t$<$F, Args...$>$$>$ \hspace{0.3cm}{\ttfamily [inline]}}



References \mbox{\hyperlink{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748}{\+\_\+cv}}, \mbox{\hyperlink{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291}{\+\_\+queue\+\_\+mutex}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f}{\+\_\+stop}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_acbc332a452776263a9e6557131495aee}{\+\_\+tasks}}.



\doxysubsection{Member Data Documentation}
\Hypertarget{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748}\index{utils::ThreadPool@{utils::ThreadPool}!\_cv@{\_cv}}
\index{\_cv@{\_cv}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\_cv}{\_cv}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_ad0284bde5203396b2e3cf95e07893748} 
std\+::condition\+\_\+variable utils\+::\+Thread\+Pool\+::\+\_\+cv\hspace{0.3cm}{\ttfamily [private]}}



Referenced by \mbox{\hyperlink{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}{enqueue()}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool()}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}{\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool()}}.

\Hypertarget{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291}\index{utils::ThreadPool@{utils::ThreadPool}!\_queue\_mutex@{\_queue\_mutex}}
\index{\_queue\_mutex@{\_queue\_mutex}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\_queue\_mutex}{\_queue\_mutex}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_ad59af3c00e330ac777fb5eb349e0e291} 
std\+::mutex utils\+::\+Thread\+Pool\+::\+\_\+queue\+\_\+mutex\hspace{0.3cm}{\ttfamily [private]}}



Referenced by \mbox{\hyperlink{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}{enqueue()}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool()}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}{\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool()}}.

\Hypertarget{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f}\index{utils::ThreadPool@{utils::ThreadPool}!\_stop@{\_stop}}
\index{\_stop@{\_stop}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\_stop}{\_stop}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_a6a2a828a76092e3170cb6a93d679043f} 
bool utils\+::\+Thread\+Pool\+::\+\_\+stop \{false\}\hspace{0.3cm}{\ttfamily [private]}}



Referenced by \mbox{\hyperlink{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}{enqueue()}}, \mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool()}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}{\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool()}}.

\Hypertarget{classutils_1_1ThreadPool_acbc332a452776263a9e6557131495aee}\index{utils::ThreadPool@{utils::ThreadPool}!\_tasks@{\_tasks}}
\index{\_tasks@{\_tasks}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\_tasks}{\_tasks}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_acbc332a452776263a9e6557131495aee} 
std\+::queue$<$std\+::function$<$void()$>$ $>$ utils\+::\+Thread\+Pool\+::\+\_\+tasks\hspace{0.3cm}{\ttfamily [private]}}



Referenced by \mbox{\hyperlink{classutils_1_1ThreadPool_a06f6b246fd98c4970c0510d48141a29d}{enqueue()}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool()}}.

\Hypertarget{classutils_1_1ThreadPool_a3113eec4fac2948b403a0d94c42a3732}\index{utils::ThreadPool@{utils::ThreadPool}!\_workers@{\_workers}}
\index{\_workers@{\_workers}!utils::ThreadPool@{utils::ThreadPool}}
\doxysubsubsection{\texorpdfstring{\_workers}{\_workers}}
{\footnotesize\ttfamily \label{classutils_1_1ThreadPool_a3113eec4fac2948b403a0d94c42a3732} 
std\+::vector$<$std\+::thread$>$ utils\+::\+Thread\+Pool\+::\+\_\+workers\hspace{0.3cm}{\ttfamily [private]}}



Referenced by \mbox{\hyperlink{classutils_1_1ThreadPool_a02ccb8118692092d5d4132eab7c751e2}{Thread\+Pool()}}, and \mbox{\hyperlink{classutils_1_1ThreadPool_a6f0428a4b19a724f956d82e408013108}{\texorpdfstring{$\sim$}{\string~}\+Thread\+Pool()}}.



The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
include/utils/\mbox{\hyperlink{ThreadPool_8hh}{Thread\+Pool.\+hh}}\item 
src/utils/\mbox{\hyperlink{ThreadPool_8cc}{Thread\+Pool.\+cc}}\end{DoxyCompactItemize}
