0

我一直在寻找使用 boost 进行线程间通信的线程安全队列,但我没有找到任何类似的东西,所以我想出了自己的解决方案。
1-我使用ManualResetEvent Boost相当于ManualResetEvent?

2-队列的代码

MessageQueue::MessageQueue()
{
}
void MessageQueue::Push(void * data)
{
    Locker.lock();
    Queue.push(data);
    Locker.unlock();
    Event.Set();
}
void * MessageQueue::Pop()
{
    void * data = NULL;
    Event.Wait();
    Locker.lock();
    data = Queue.front();
    Queue.pop();
    if(Queue.size() == 0)
    {
      Event.Reset();
    }
    Locker.unlock();
    return data;

 }
 void * MessageQueue::Peek()
 {
    void * data = NULL;
    Locker.lock();
    if(Queue.size() > 0)
    {
      data = Queue.front();
      Queue.pop();
      if(Queue.size() == 0)
         Event.Reset();
    }
    Locker.unlock();
    return data;
 }
 MessageQueue::~MessageQueue(void)
 {
 }

它确实有效!但它是实现线程间通信队列的正确方法吗?,有更好的选择吗?

4

0 回答 0