blob: d2ed7d2dc8ca2b6df0b510a035660f10ab7fed38 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include "queue.hpp"
namespace smtp::thread
{
void Queue::Push( Message const &message)
{
std::lock_guard<std::mutex> lock{mMutex};
mMessageQueue.push( message );
mCondition.notify_one();
}
std::shared_ptr<Message> Queue::WaitAndPop()
{
std::unique_lock<std::mutex> lock{mMutex};
mCondition.wait(lock, [this](){return !mMessageQueue.empty();});
auto result = std::make_shared<Message>(mMessageQueue.front());
mMessageQueue.pop();
return result;
}
}
|