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