#pragma once #include #include #include // #include "sdk/os/zos.hpp" #include "osbasic_h.hpp" #include "zos_thread.hpp" // namespace iflytop { using namespace std; class ZOSSchduler { public: class PeriodJob; /******************************************************************************* * Context * *******************************************************************************/ class Context { friend class ZOSSchduler; protected: PeriodJob* periodJob; public: uint32_t getScheduleTimes() { return periodJob->schedule_times; } }; /******************************************************************************* * PeriodJob * *******************************************************************************/ class PeriodJob { public: PeriodJob(function job, uint32_t period_ms) { this->job = job; this->period_ms = period_ms; } function job; uint32_t period_ms = 0; uint32_t lastcall = 0; uint32_t schedule_times = 0; }; /******************************************************************************* * PARA * *******************************************************************************/ list m_periodJobs; ZOSThread m_thread; uint32_t ticket = 0; public: ZOSSchduler() {} void initialize(){}; void regPeriodJob(function job, uint32_t period_ms); void startSchedule(const char* threadname, int stack_size, osPriority priority); private: void loop(); }; // #define ZHAL_CORE_REG(period_ms, job) ZOSSchduler::getInstance()->regPeriodJob([this](ZOSSchduler::Context& context) { job }, period_ms); } // namespace iflytop