我正在寻找一个使用boost进行线程间通信的线程安全队列,但我没有发现任何类似的东西,所以我提出了自己的解决方案。
1-我使用了ManualResetEvent Boost equivalent of 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)
{
}
它确实有用!但是它是实现线程间通信队列的正确方法吗? ,有更好的选择吗?