/* * AlarmTimer.hh * * Created on: 26 мая 2021 г. * Author: sozonov */ #ifndef UMLIBRARY_SCHEMATIC_ALARMTIMERLOGIC_HH_ #define UMLIBRARY_SCHEMATIC_ALARMTIMER_HH_ #include "../systemic/Timer.hh" //! Класс таймера с тайм-аутом. class AlarmTimerLogic { protected: //Настройки const time_t time_out; //!<Тайм-аут в секундах. При достижении, заданного тайм-аута вызывается функция alarm и таймер останавливается. time_t time_start; //!<Время старта таймера (необходимо для расчета промежутка времени, который таймер работал). time_t current_time; //!<Текущее значение таймера в секундах. bool otf_alarm; //!<Флаг того, что достигнут тайм-аут. bool otf_pause; //!<Флаг паузы. 1-пауза/0-нет. bool current_state; //!<Статус, запущен/остановлен. public: const bool & state() { return current_state; } AlarmTimerLogic(float _ti_out):time_out(systemic::seconds2time(_ti_out)),current_state(false), current_time(systemic::seconds2time(0.0)), otf_alarm(false), otf_pause(false){} //!Метод запуска таймера. void start(); //!Метод остановки таймера. void stop(); //!Метод сброса таймера. void reset(); //!Фоновая функция счёта. void process(); //!Получение значения текущего времени. float getCurrentTime() const {return systemic::time2seconds(current_time);} //!Метод достижения значение тайм-аута. virtual void alarm(){} }; #include "../systemic/IFunctor.hh" #include "../systemic/IProcess.hh" namespace schematic { class AlarmTimerCallback : public AlarmTimerLogic, public systemic::IProcess { systemic::IFunctor & alarmCalback; //! колбэк о пересечении счётчиком границы virtual void alarm() { alarmCalback(); } public: void process() override { AlarmTimerLogic::process(); } AlarmTimerCallback(systemic::IFunctor & _alarm, float _ti_out):alarmCalback(_alarm), AlarmTimerLogic(_ti_out){} }; } #endif /* UMLIBRARY_SCHEMATIC_ALARMTIMERLOGIC_HH_ */