31 #include <boost/format.hpp>
32 #include <boost/function.hpp>
33 #include <boost/noncopyable.hpp>
34 #include <boost/thread/condition.hpp>
35 #include <boost/thread/recursive_mutex.hpp>
38 #include "rsc/rscexports.h"
71 mutable boost::recursive_mutex
mutex;
106 boost::recursive_mutex::scoped_lock lock(
mutex);
134 M
pop(
const boost::uint32_t& timeoutMs = 0) {
136 boost::recursive_mutex::scoped_lock lock(
mutex);
139 if (timeoutMs == 0) {
142 #if BOOST_VERSION >= 105000
143 if (!
condition.timed_wait(lock, boost::posix_time::milliseconds(timeoutMs))) {
145 const boost::system_time timeout = boost::get_system_time()
146 + boost::posix_time::milliseconds(timeoutMs);
147 if (!
condition.timed_wait(lock, timeout)) {
149 throw QueueEmptyException(boost::str(boost::format(
"No element available on queue within %d ms.") % timeoutMs));
158 M message =
queue.front();
173 boost::recursive_mutex::scoped_lock lock(
mutex);
179 M message =
queue.front();
192 boost::recursive_mutex::scoped_lock lock(
mutex);
193 return queue.empty();
202 boost::recursive_mutex::scoped_lock lock(
mutex);
203 return this->
queue.size();
210 boost::recursive_mutex::scoped_lock lock(
mutex);
211 while (!this->
queue.empty()) {
223 boost::recursive_mutex::scoped_lock lock(
mutex);