我正在尝试创建一个简单的调度程序,类可以用来在以后存储和调用任务。 addItem()
函数存储传递给它的函数和未来时间,refresh()
(每个循环运行)检查是否有时间运行存储的方法。
由于以下错误,我在同时存储不同类的方法时遇到了问题:
cannot convert 'void (foo::bar::*)()' to 'void (*)()'
并且在我开始工作时调用函数也遇到了麻烦。
这是我的代码:
#include <Arduino.h>
#include <vector>
namespace Scheduler {
struct s_singular {
void (*function)();
uint32_t timeDelay;
};
std::vector<s_singular> _scheduleVec;
void addItem(void (*func)(), uint32_t timeDelay) {
_scheduleVec.push_back({func, millis() + timeDelay});
}
void refresh() {
for (auto i = _scheduleVec.begin(); i != _scheduleVec.end(); i++) {
auto item = (*i);
if (item.timeDelay >= millis()) {
(*item.function)();
}
}
}
};
如果你想知道我如何在Arduino中使用矢量,我正在使用ArduinoSTL库。