UniSet 2.32.1
Открытые члены | Защищенные данные | Полный список членов класса
Класс uniset::HourGlass

#include <HourGlass.h>

Граф связей класса uniset::HourGlass:
Collaboration graph
[см. легенду]

Открытые члены

void run (timeout_t msec) noexcept
 
void reset () noexcept
 
timeout_t duration () const noexcept
 
bool rotate (bool st) noexcept
 
timeout_t current () const noexcept
 
timeout_t interval () const noexcept
 
bool check () const noexcept
 
bool enabled () const noexcept
 
timeout_t amount () const noexcept
 
timeout_t remain () const noexcept
 

Защищенные данные

PassiveTimer t
 
bool _state = { false }
 
timeout_t _sand = { 0 }
 
timeout_t _size = { 0 }
 

Подробное описание

Песочные часы. Класс реализующий логику песочных часов. Удобен для создания задержек на срабатывание и на отпускание (как фильтр от кратковременных изменений) с "накоплением времени". Аналогия с песочными часами:

Выставляете время 'run(msec)'.. устанавливаются в какое-то положение часы 'rotate(true)'... песок сыплется... если весь пересыпался - срабатывает условие 'check()==true'. Если во время работы условие изменилось (часы перевернули в обратную сторону), то уже успевший пересыпаться песок, начинает пересыпаться в обратную сторону. Если опять повернули часы... продолжает сыпаться опять (добавляясь к тому песку, что "не успел" высыпаться обратно). Т.е. до момента срабатывания уже меньше времени чем "полное время" и т.д.

Класс является "пассивным", т.е. требует периодического вызова функции rotate и check, для проверки наступления условия срабатывания.

Пример использования.
Допустим у вас есть сигнал "температура"(in_temp) и вам необходимо выставить какой-то флаг о перегреве (isOverheating). Если температура продержится выше порога в течение 10 секунд check() станет "true". Если температура станет меньше порога через 6 секунд ("песок начнёт обратно пересыпаться"), а потом опять станет выше, то до срабатывания check() == true уже останется 4 сек, а не 10 сек. Получается, что для срабатывания check()=true сигнал должен не колеблясь держаться больше заданного времени.
hg.run(10000); // настраиваем часы на 10 сек..
while( ....)
{
hg.rotate( in_temp > HiTemp ); // управляем состоянием песочных часов (прямой или обратный ход часов).
isOverheating = hg.check();
}
Definition HourGlass.h:64

Данные класса

◆ _sand

timeout_t uniset::HourGlass::_sand = { 0 }
protected

сколько песка ещё осталось..

◆ _size

timeout_t uniset::HourGlass::_size = { 0 }
protected

размер часов

◆ _state

bool uniset::HourGlass::_state = { false }
protected

текущее "положение часов", true - прямое, false - обратное (перевёрнутое)

◆ t

PassiveTimer uniset::HourGlass::t
protected

таймер для отсчёта времени..