C++实现一个简单消息队列的示例详解

  #include

  #include

  #include

  ///

  /// 消息队列

  ///

  /// 消息类型

  template class MessageQueue {

  public:

  ///

  /// 推入消息

  ///

  /// 消息对象

  void push(const T& msg) {

  std::unique_locklck(_mtx);

  _queue.push(msg);

  _cv.notify_one();

  }

  ///

  /// 轮询消息

  ///

  /// 消息对象

  /// 是否接收到消息

  bool poll(T& msg) {

  std::unique_locklck(_mtx);

  if (_queue.size())

  {

  msg = _queue.front();

  _queue.pop();

  return true;

  }

  return false;

  }

  ///

  /// 等待消息

  ///

  /// 消息对象

  void wait(T& msg) {

  std::unique_locklck(_mtx);

  while (!_queue.size()) _cv.wait(lck);

  msg = _queue.front();

  _queue.pop();

  }

  //队列长度

  size_t size() {

  std::unique_locklck(_mtx);

  return _queue.size();

  }

  private:

  //队列

  std::queue _queue;

  //互斥变量

  std::mutex _mtx;

  //条件变量

  std::condition_variable _cv;

  };