Hiva::Rate

  • Hiva::BaseRate

    The rate (period) base class is usually used for sleep in a loop so that a task is executed at a fixed period (the task execution duration is subtracted during the sleep time).

     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_;
    };
    }
    
  • Hiva::HivaRate

    It inherits BaseRate and performs sleep wait based on HivaTime.

     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_;
    };
    } 
    
  • Hiva::WallRate

    It inherits BaseRate and performs sleep wait based on WallTime.

     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_;
    };
    }