Rate(周期)基类,常用于循环中的sleep,使得任务按固定周期执行(sleep时会减去任务执行耗时)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | namespace Hiva { /* Class to help run loops at a desired frequency */ class BaseRate { public: BaseRate(const double frequency); explicit BaseRate(const BaseDuration &durationVal); virtual ~BaseRate() = default; virtual bool Sleep() = 0; virtual void Reset() = 0; BaseDuration CycleTime() const; BaseDuration ExpectedCycleTime() const; protected: BaseDuration expectedCycleTime_; BaseDuration actualCycleTime_; }; } |
继承BaseRate,基于HivaTime进行sleep等待。
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace Hiva { /* Class to help run loops at a desired frequency */ class HivaRate : public BaseRate { public: HivaRate(const double frequency); explicit HivaRate(const BaseDuration &durationVal); ~HivaRate() override = default; bool Sleep() override; void Reset() override; private: HivaTime start_; }; } |
继承BaseRate,基于WallTime进行sleep等待。
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace Hiva { /* Class to help run loops at a desired frequency */ class WallRate : public BaseRate { public: WallRate(const double frequency); explicit WallRate(const BaseDuration &durationVal); ~WallRate() override = default; bool Sleep() override; void Reset() override; private: WallTime start_; }; } |