template<class Caller, typename OutIdType = int, typename ValueType = bool>
class uniset::TriggerOUT< Caller, OutIdType, ValueType >
- Описание
- Этот триггер гарантирует, что значению "val" будет равен всегда только один выход (или ни одного). При помощи TriggerOUT::set(), на определённый выход подаётся "val"(val также может быть = "0"), при этом все остальные выходы выставляются в "0". Работает в следующей последовательности: сперва выставляются все выходы в "0", а потом уже нужный (единственный) выход выставляется в "val".
Полезен для случаев, когда, например, команда "включить" и "отключить" подается на разные выходы. В этом случае тригер не позволяет иметь на выходах противоречивое состояние.
В конструкторе указывается функция, которая будет вызываться при ИЗМЕНЕНИИ состояния того, или иного выхода.
- Предупреждения
- Нет блокирования совместного доступа(не рассчитан на работу в многопоточной среде).
- Пример использования
#include "TriggerOUT.h"
class MyClass
{
public:
MyClass(){};
~MyClass(){};
void out(int out_id, int val){ cout << "TriggerOUT out="<< out_id << " val=" << val <<endl;}
...
};
...
MyClass rec;
TriggerOUT<MyClass,int,int> tr_out(&rec, &MyClass::out);
tr_out.add(1,0);
tr_out.add(2,0);
...
tr_out.set(1,4);
cout << ( tr_out.getState(2) !=0 ? "FAIL" : "OK" ) << endl;
tr_out.set(2,3);
cout << ( tr_out.getState(1) !=0 ? "FAIL" : "OK" ) << endl;