template <class T>
class MessageQueue
{
public:
void push(const T &msg)
{
std::unique_lock<std::mutex> lck(m_mtx);
m_queue.push(msg);
m_cv.notify_one();
}
bool poll(T &msg)
{
std::unique_lock<std::mutex> lck(m_mtx);
if (m_queue.size())
{
msg = m_queue.front();
m_queue.pop();
return true;
}
return false;
}
void wait(T &msg)
{
std::unique_lock<std::mutex> lck(m_mtx);
while (!m_queue.size())
m_cv.wait(lck);
msg = m_queue.front();
m_queue.pop();
}
size_t size()
{
std::unique_lock<std::mutex> lck(m_mtx);
return m_queue.size();
}
private:
std::queue<T> m_queue;
std::mutex m_mtx;
std::condition_variable m_cv;
};
C++实现消息队列模板类
于 2023-09-22 14:35:55 首次发布