9 #include <condition_variable>
20 template <
typename _T,
typename _QueueT = std::queue<_T>>
24 template <
typename _U>
28 std::lock_guard<decltype(x_mutex)> guard{x_mutex};
29 m_queue.push(std::forward<_U>(_elem));
36 std::unique_lock<std::mutex> lock{ x_mutex };
37 m_cv.wait(lock, [
this] {
return !m_queue.empty(); });
38 auto item = std::move(m_queue.front());
43 _T
pop(std::chrono::milliseconds
const& _waitDuration)
45 std::unique_lock<std::mutex> lock{x_mutex};
46 if (!m_cv.wait_for(lock, _waitDuration, [
this] { return !m_queue.empty(); }))
47 BOOST_THROW_EXCEPTION(WaitTimeout());
49 auto item = std::move(m_queue.front());
57 std::condition_variable m_cv;