From 34cd75f77d0ca94dbdba4e6cc9451fe4d33e78b3 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期三, 19 五月 2021 19:14:13 +0800 Subject: [PATCH] add api BHQueryProcs. --- src/timed_queue.h | 39 +++++++++++++++++++++++++++------------ 1 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/timed_queue.h b/src/timed_queue.h index 14e318d..af77b11 100644 --- a/src/timed_queue.h +++ b/src/timed_queue.h @@ -1,7 +1,7 @@ /* * ===================================================================================== * - * Filename: failed_msg.h + * Filename: timed_queue.h * * Description: * @@ -24,23 +24,38 @@ #include <string> template <class Data, class ClockType = std::chrono::steady_clock> -class TimedQueue +class TimedData { public: typedef ClockType Clock; typedef typename Clock::time_point TimePoint; typedef typename Clock::duration Duration; + TimedData(const TimePoint &expire, const Data &data) : + expire_(expire), data_(data) {} + TimedData(const TimePoint &expire, Data &&data) : + expire_(expire), data_(std::move(data)) {} + bool Expired() const { return Clock::now() > expire_; } + const TimePoint &expire() const { return expire_; } + Data &data() { return data_; } + Data const &data() const { return data_; } + private: - struct Record { - TimePoint expire_; - Data data_; - Record(const TimePoint &expire, const Data &data) : - expire_(expire), data_(data) {} - Record(const TimePoint &expire, Data &&data) : - expire_(expire), data_(std::move(data)) {} - bool Expired() { return Clock::now() > expire_; } - }; + TimePoint expire_; + Data data_; +}; + +template <class Data, class ClockType = std::chrono::steady_clock> +class TimedQueue +{ + typedef TimedData<Data, ClockType> Record; + +public: + typedef typename Record::Clock Clock; + typedef typename Record::TimePoint TimePoint; + typedef typename Record::Duration Duration; + +private: typedef std::list<Record> Queue; Synced<Queue> queue_; @@ -62,7 +77,7 @@ do { if (it->Expired()) { it = q.erase(it); - } else if (func(it->data_)) { + } else if (func(it->data())) { it = q.erase(it); } else { ++it; -- Gitblit v1.8.0