1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#ifndef _MessageQueue_h_
#define _MessageQueue_h_
#include <boost/thread/condition.hpp>
#include <boost/optional/optional_fwd.hpp>
#include <queue>
#include <mutex>
#include "../util/Export.h"
#include "Message.h"
/** A thread-safe message queue. The entire public interface is guarded with mutex locks. */
class FO_COMMON_API MessageQueue
{
public:
MessageQueue(std::mutex& monitor);
/** Returns true iff the queue is empty. */
bool Empty() const;
/** Returns the number of messages in the queue. */
std::size_t Size() const;
/** Empties the queue. */
void Clear();
/** Adds \a message to the end of the queue. */
void PushBack(Message message);
/** Return and remove the first message in the queue. */
boost::optional<Message> PopFront();
private:
std::queue<Message> m_queue;
std::mutex& m_monitor;
};
#endif
|