我一直在寻找使用 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)
{
}
它确实有效!但它是实现线程间通信队列的正确方法吗?,有更好的选择吗?