class QueueEntry {
public:
info_connection remove();
void insert(int fd);
size_t size() const { return q.size(); }
private:
std::mutex m;
std::condition_variable w, r;
std::deque<info_conn> q;
};
info_connection QueueEntry::remove(){
std::unique_lock<std::mutex> lck(m);
r.wait(lck, [this]() { return q.size() > 0; });
auto i = std::move(q.front());
q.pop_front();
w.notify_one();
return i;
}
void QueueEntry::insert(int fd){
std::unique_lock<std::mutex> locker(m);
w.wait(locker, [this]() { return q.size() < MAX_QUEUE_SIZE; });
info_connection i { fd, std::chrono::system_clock::now() };
q.push_back(i);
r.notify_one();
}