Boostを使用したスレッド間通信用のスレッドセーフキューを探していましたが、似たようなものが見つからなかったため、独自の解決策を考え出しました。
1- ManualResetEventと同等のManualResetEventBoostを使用しましたか?
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)
{
}
実際には機能しますが、スレッド間通信用のキューを実装する正しい方法ですか?、より良い代替手段はありますか?