mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +03:00
working example of callback with date passing inside and outside
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <Arduino.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -8,22 +8,26 @@
|
|||||||
// должен быть метод без результата и без параметров.
|
// должен быть метод без результата и без параметров.
|
||||||
// Новый тип мы называем AsynсActionCb - хотя можешь назвать вообще как нравиться а что значит callBack
|
// Новый тип мы называем AsynсActionCb - хотя можешь назвать вообще как нравиться а что значит callBack
|
||||||
|
|
||||||
//а как вызывать callback и когда их много? когда нужно вызывать например 10 разных из класса?
|
typedef std::function<void()> AsyncActionCb; //метод без результата и параметров
|
||||||
//
|
|
||||||
|
|
||||||
typedef std::function<void(void*)> AsyncActionCb; //метод без результата и параметров
|
typedef std::function<bool(const String)> AsyncParamActionCb; //метод без результата и параметров
|
||||||
|
|
||||||
class AsyncActions {
|
class AsyncActions {
|
||||||
private:
|
private:
|
||||||
long count;
|
long count;
|
||||||
AsyncActionCb _cb;
|
AsyncActionCb _cb;
|
||||||
|
AsyncParamActionCb _pcb;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AsyncActions();
|
AsyncActions();
|
||||||
void loop();
|
void loop();
|
||||||
|
|
||||||
void setCallback(AsyncActionCb cb) { //передаем внутрь класса функцию любую void функцию без агрументов
|
void setCallback(AsyncActionCb cb) { //передаем внутрь класса функцию любую void функцию без агрументов
|
||||||
_cb = cb;
|
_cb = cb;
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
void setCallback(AsyncParamActionCb cb) { //передаем внутрь класса функцию любую void функцию с аргументами
|
||||||
|
_pcb = cb;
|
||||||
|
}
|
||||||
|
};
|
||||||
extern AsyncActions* async;
|
extern AsyncActions* async;
|
||||||
@@ -5,9 +5,28 @@ AsyncActions::AsyncActions(){};
|
|||||||
void AsyncActions::loop() {
|
void AsyncActions::loop() {
|
||||||
count++;
|
count++;
|
||||||
if (count > 5000) {
|
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;
|
count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AsyncActions* async;
|
AsyncActions* async;
|
||||||
17
src/main.cpp
17
src/main.cpp
@@ -1,4 +1,5 @@
|
|||||||
#include "Bus/BusScannerFactory.h"
|
#include "Bus/BusScannerFactory.h"
|
||||||
|
#include "Class/AsyncActions.h"
|
||||||
#include "Class/Switch.h"
|
#include "Class/Switch.h"
|
||||||
#include "Cmd.h"
|
#include "Cmd.h"
|
||||||
#include "DeviceList.h"
|
#include "DeviceList.h"
|
||||||
@@ -6,7 +7,6 @@
|
|||||||
#include "HttpServer.h"
|
#include "HttpServer.h"
|
||||||
#include "Init.h"
|
#include "Init.h"
|
||||||
#include "Utils/Timings.h"
|
#include "Utils/Timings.h"
|
||||||
#include "Class/AsyncActions.h"
|
|
||||||
|
|
||||||
void not_async_actions();
|
void not_async_actions();
|
||||||
|
|
||||||
@@ -69,7 +69,8 @@ void setup() {
|
|||||||
udp_init();
|
udp_init();
|
||||||
#endif
|
#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;
|
just_load = false;
|
||||||
initialized = true;
|
initialized = true;
|
||||||
@@ -77,13 +78,19 @@ void setup() {
|
|||||||
async = new AsyncActions();
|
async = new AsyncActions();
|
||||||
|
|
||||||
//async->setCallback([&](void*) {
|
//async->setCallback([&](void*) {
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//});
|
//});
|
||||||
|
|
||||||
async->setCallback(myCallback); //
|
async->setCallback([]() {
|
||||||
|
Serial.println("123");
|
||||||
|
});
|
||||||
|
|
||||||
|
async->setCallback([](const String str) {
|
||||||
|
Serial.println(str);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user