Класс HourGlass
#include <HourGlass.h>
Полный список членов класса
|
Открытые члены |
|
void | run (timeout_t msec) |
|
void | reset () |
|
int | duration () |
|
bool | rotate (bool st) |
|
timeout_t | current (bool st) |
|
timeout_t | interval (bool st) |
|
bool | check () |
|
bool | state () |
Защищенные данные |
|
PassiveTimer | t |
|
bool | _state |
|
int | _sand |
|
timeout_t | _size |
Подробное описание
Песочные часы. Класс реализующий логику песочных часов. Удобен для создания задержек на срабатывание и на отпускание (как фильтр от кратковременных изменений) с "накоплением времени". Аналогия с песочными часами:
- Выставляете время(run).. устанавливаются в какое-то положение часы (rotate)... песок сыплется... если весь пересыпался - срабатывает условие (check()==true). Если во время работы условие изменилось (часы перевернули в обратную сторону), то уже успевший пересыпаться песок, начинает пересыпаться в обратную сторону. Если опять повернули часы... продолжает сыпаться опять (добвляясь к тому песку, что "не успел" высыпаться обратно). Т.е. до момента срабатывания уже меньше времени чем "полное время" и т.д.
Класс является "пассивным", т.е. требует периодического вызова функции rotate и check, для проверки наступления условия срабатывания.
- Пример использования.
- Допустим у вас есть сигнал "перегрев"(in_overheating) и вам необходимо выставить какой-то флаг о перегреве (isOverheating), если этот сигнал устойчиво держится в течение 10 секунд, и при этом если сигнал снялся, то вам необходимо как минимум те же 10 секунд, подождать прежде чем "снять" флаг. Для этого удобно использовать данный класс.
HourGlass hg;
hg.run(10000);
while( ....)
{
hg.rotate(in_overheating);
isOverheating = hg.check();
}
Объявления и описания членов класса находятся в файле: