Hej.
Piszę kod do sterownika LEDów RGB WiFi w C++. Całość jest oparta na ESP8266 jednak problem mam raczej natury programowej. Mianowicie potrzebuję zrobić klasę TimerClass, która, między innymi, będzie przechowywać obiekt jakiejś innej klasy (najlepiej dowolnej) oraz dowolną metodę tegoż obiektu. Dodatkowo potrzebuję napisać dwie metody dla obiektów klasy TimerClass, jedną, która będzie przyjmowała obiekt wraz z metodą do przypisania, oraz drugą, która będzie później tą metodę wykonywała. Wiem, że brzmi trochę zagmatwanie :/ Sama klasa po prostu sprawdza czy upłynął zadany czas i jeżeli tak to ma uruchomić wcześniej przypisaną wersję metodę konkretnego obiektu. Ale właśnie z tym przypisaniem metody jest ogromy problem.
Tutaj mam kod tej klasy (tyle ile udało mi się napisać):
class TimerClass
{
protected:
unsigned long _time;
unsigned int _wait;
bool output;
//Tu powinny być zmienne do zapisania obiektu i metody
public:
TimerClass() {}
TimerClass(unsigned long time);
bool Try();
void Set(/*Obiekt i jego metoda*/);
}
TimerClass::TimerClass(unsigned long time)
{
_time = millis();
_wait = time;
output = false;
}
bool TimerClass::Try()
{
if (output) return true;
unsigned long tmp0 = millis();
if (abs(tmp0 - _time) >= _wait) {
//W tym miejscu powinien być kod wywołujący metodę na obiekcie
output = true;
return true;
}
return false;
}
void TimerClass::Set(/*Obiekt i jego metoda*/)
{
//Tu ma być kod zapisujący obiekt i metodę
}
Tutaj jest miejsce wywołania:
class KlasaA
{
public:
void Metoda1();
void Metoda2();
};
class KlasaB
{
public:
void MetodaX();
void MetodaY();
};
KlasaA obiekt1;
KlasaB obiekt2;
TimerClass timer1 = new TimerClass(10000);
TimerClass timer2 = new TimerClass(20000);
timer1.Set(/*Przypisanie Metoda1 obiektu obiekt1 */)
timer2.Set(/*Przypisanie MetodaY obiektu obiekt2 */)
while(true){
//Jakiś kod
timer1.Try();
timer2.Try();
}
Całość ma działać jako pseudo wielowątkowe wykonywanie programu na ESP8266. Głowię się nad tym już kilka tygodni i nic mi nie przychodzi do głowy, cały czas jak uda mi się rozwiązać jeden błąd to znajduję inny. Samo zapisanie obiektu, a raczej wskaźnika na niego nie jest problemem, gorzej jest z tą metodą, nie mam kompletnie pomysłu jak to napisać aby było w miarę uniwersalne. Na przykład żeby działało dla wszystkich obiektów klas dziedziczących z jakiejś klasy wirtualnej. Jeżeli nie da się tak jak próbuję to najwyżej po prostu zrezygnuję