diff --git a/include/Class/AsyncActions.h b/include/Class/AsyncActions.h index 19f7fc61..fe81b186 100644 --- a/include/Class/AsyncActions.h +++ b/include/Class/AsyncActions.h @@ -1,5 +1,5 @@ #pragma once - +#include #include #include @@ -8,22 +8,26 @@ // должен быть метод без результата и без параметров. // Новый тип мы называем AsynсActionCb - хотя можешь назвать вообще как нравиться а что значит callBack -//а как вызывать callback и когда их много? когда нужно вызывать например 10 разных из класса? -// +typedef std::function AsyncActionCb; //метод без результата и параметров -typedef std::function AsyncActionCb; //метод без результата и параметров +typedef std::function AsyncParamActionCb; //метод без результата и параметров class AsyncActions { private: long count; AsyncActionCb _cb; + AsyncParamActionCb _pcb; public: AsyncActions(); void loop(); + void setCallback(AsyncActionCb cb) { //передаем внутрь класса функцию любую void функцию без агрументов _cb = cb; } -}; + void setCallback(AsyncParamActionCb cb) { //передаем внутрь класса функцию любую void функцию с аргументами + _pcb = cb; + } +}; extern AsyncActions* async; \ No newline at end of file diff --git a/src/Class/AsyncActions.cpp b/src/Class/AsyncActions.cpp index c629a841..13705f9f 100644 --- a/src/Class/AsyncActions.cpp +++ b/src/Class/AsyncActions.cpp @@ -5,9 +5,28 @@ AsyncActions::AsyncActions(){}; void AsyncActions::loop() { count++; if (count > 5000) { - if(_cb) _cb; //что означает эта запись? это и есть вызов callback? + // Проверяем что переменная содержит указатель - не пустая не null + // и непосредственно вызываем то, на что это указывает + // просто пишем имя - без () - это указатель на фунецию. + // () - вызываем функцию - с пустым набором параметров + + if (_cb != NULL) { + _cb(); + } + //или ровно тоже самое + //if (_cb) _cb(); + + if (_pcb) { + if (_pcb("SomeTextValue")) { + Serial.print("Got true!"); + } else { + Serial.print("Got false!"); + } + } + count = 0; } } + AsyncActions* async; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 57e88e5e..129e36a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ #include "Bus/BusScannerFactory.h" +#include "Class/AsyncActions.h" #include "Class/Switch.h" #include "Cmd.h" #include "DeviceList.h" @@ -6,7 +7,6 @@ #include "HttpServer.h" #include "Init.h" #include "Utils/Timings.h" -#include "Class/AsyncActions.h" void not_async_actions(); @@ -69,7 +69,8 @@ void setup() { udp_init(); #endif - ts.add(TEST, 1000 * 60, [&](void*) { pm.info(printMemoryStatus()); }, nullptr, true); + ts.add( + TEST, 1000 * 60, [&](void*) { pm.info(printMemoryStatus()); }, nullptr, true); just_load = false; initialized = true; @@ -77,14 +78,20 @@ void setup() { async = new AsyncActions(); //async->setCallback([&](void*) { -// -// + // + // //}); - async->setCallback(myCallback); // - - + async->setCallback([]() { + Serial.println("123"); + }); + async->setCallback([](const String str) { + Serial.println(str); + + return false; + }); + } void loop() {