boost thread库里面没有实现类似java中BlockingQueue的东东。但是使用条件变量来实现一个还是很容易的。下面的代码是以前学习boost thread库时的练手之作。
==============================================================
#include <boost/shared_array.hpp>
#include <boost/thread.hpp>
#include <stdexcept>
#include <queue>
class MsgQueue
{
public:
typedef boost::shared_array<char> Msg;
MsgQueue(std::size_t max_size_)
: max_size(max_size_)
, close_flag(false)
{
if (max_size < 1)
{
throw std::runtime_error("MsgQueue::MsgQueue : max_size < 1");
}
}
~MsgQueue()
{
close();
}
void push(Msg msg)
{
boost::mutex::scoped_lock lock(mtx);
while (msgs.size() >= max_size && !close_flag)