You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.2 KiB

2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include <stdio.h>
  3. #include <functional>
  4. #include <list>
  5. #include "sdk/os/zos.hpp"
  6. //
  7. namespace iflytop {
  8. using namespace std;
  9. class OSDefaultSchduler {
  10. public:
  11. class PeriodJob;
  12. class Context {
  13. friend class OSDefaultSchduler;
  14. protected:
  15. PeriodJob* periodJob;
  16. public:
  17. uint32_t getScheduleTimes() { return periodJob->schedule_times; }
  18. };
  19. class PeriodJob {
  20. public:
  21. PeriodJob(function<void(Context& context)> job, uint32_t period_ms) {
  22. this->job = job;
  23. this->period_ms = period_ms;
  24. }
  25. function<void(Context& context)> job;
  26. uint32_t period_ms = 0;
  27. uint32_t lastcall = 0;
  28. uint32_t schedule_times = 0;
  29. };
  30. list<PeriodJob*> m_periodJobs;
  31. private:
  32. OSDefaultSchduler() {}
  33. public:
  34. static OSDefaultSchduler* getInstance();
  35. void initialize(){};
  36. void regPeriodJob(function<void(Context& context)> job, uint32_t period_ms);
  37. void loop();
  38. };
  39. // #define ZHAL_CORE_REG(period_ms, job) OSDefaultSchduler::getInstance()->regPeriodJob([this](OSDefaultSchduler::Context& context) { job }, period_ms);
  40. } // namespace iflytop